diff options
author | Jason Monk <jmonk@google.com> | 2015-06-10 11:03:06 -0400 |
---|---|---|
committer | Jason Monk <jmonk@google.com> | 2015-06-10 15:49:36 -0400 |
commit | 3a90d7cc69899f20f82ebe976fa04e19ebf27aaa (patch) | |
tree | 7e8000d7915d7adcec8f12c21e2b2164a8154fe3 /src/com/android/settings/fuelgauge | |
parent | da6a4904a9b6370b9a4ceeab6f8ecc08738a2c7b (diff) | |
download | packages_apps_Settings-3a90d7cc69899f20f82ebe976fa04e19ebf27aaa.zip packages_apps_Settings-3a90d7cc69899f20f82ebe976fa04e19ebf27aaa.tar.gz packages_apps_Settings-3a90d7cc69899f20f82ebe976fa04e19ebf27aaa.tar.bz2 |
New dialog for ignore battery optimizations
Bug: 21375688
Change-Id: I7240cc0615044cf5a34349e5ffdf2ae2e0f6333f
Diffstat (limited to 'src/com/android/settings/fuelgauge')
-rw-r--r-- | src/com/android/settings/fuelgauge/HighPowerDetail.java | 119 |
1 files changed, 88 insertions, 31 deletions
diff --git a/src/com/android/settings/fuelgauge/HighPowerDetail.java b/src/com/android/settings/fuelgauge/HighPowerDetail.java index e399a34..f6964af 100644 --- a/src/com/android/settings/fuelgauge/HighPowerDetail.java +++ b/src/com/android/settings/fuelgauge/HighPowerDetail.java @@ -16,60 +16,85 @@ package com.android.settings.fuelgauge; +import android.app.Activity; import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; import android.content.Context; +import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; import android.os.Bundle; -import android.preference.Preference; -import android.preference.Preference.OnPreferenceChangeListener; -import android.preference.SwitchPreference; +import android.util.Pair; +import android.util.SparseBooleanArray; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.TextView; -import com.android.internal.logging.MetricsLogger; import com.android.settings.R; -import com.android.settings.applications.AppInfoWithHeader; +import com.android.settings.applications.AppInfoBase; import com.android.settingslib.applications.ApplicationsState.AppEntry; -public class HighPowerDetail extends AppInfoWithHeader implements OnPreferenceChangeListener { - - private static final String KEY_HIGH_POWER_SWITCH = "high_power_switch"; +public class HighPowerDetail extends DialogFragment implements OnClickListener { private final PowerWhitelistBackend mBackend = PowerWhitelistBackend.getInstance(); - private SwitchPreference mUsageSwitch; + private String mPackageName; + private CharSequence mLabel; + private Adapter mAdapter; + private int mSelectedIndex; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - addPreferencesFromResource(R.xml.high_power_details); - mUsageSwitch = (SwitchPreference) findPreference(KEY_HIGH_POWER_SWITCH); - mUsageSwitch.setOnPreferenceChangeListener(this); + mPackageName = getArguments().getString(AppInfoBase.ARG_PACKAGE_NAME); + PackageManager pm = getContext().getPackageManager(); + try { + mLabel = pm.getApplicationInfo(mPackageName, 0).loadLabel(pm); + } catch (NameNotFoundException e) { + mLabel = mPackageName; + } + mAdapter = new Adapter(getContext(), R.layout.radio_with_summary); + mAdapter.add(new Pair<String, String>(getString(R.string.ignore_optimizations_on), + getString(R.string.ignore_optimizations_on_desc))); + mAdapter.add(new Pair<String, String>(getString(R.string.ignore_optimizations_off), + getString(R.string.ignore_optimizations_off_desc))); + mSelectedIndex = mBackend.isWhitelisted(mPackageName) ? 0 : 1; + if (mBackend.isSysWhitelisted(mPackageName)) { + mAdapter.setEnabled(1, false); + } } @Override - protected boolean refreshUi() { - mUsageSwitch.setEnabled(!mBackend.isSysWhitelisted(mPackageName)); - mUsageSwitch.setChecked(mBackend.isWhitelisted(mPackageName)); - return true; + public Dialog onCreateDialog(Bundle savedInstanceState) { + AlertDialog.Builder b = new AlertDialog.Builder(getContext()) + .setTitle(getString(R.string.ignore_optimizations_title, mLabel)) + .setNegativeButton(R.string.cancel, null) + .setSingleChoiceItems(mAdapter, mSelectedIndex, this); + if (!mBackend.isSysWhitelisted(mPackageName)) { + b.setPositiveButton(R.string.done, this); + } + return b.create(); } @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - if (newValue == Boolean.TRUE) { - mBackend.addApp(mPackageName); + public void onClick(DialogInterface dialog, int which) { + if (which == DialogInterface.BUTTON_POSITIVE) { + boolean newValue = mSelectedIndex == 0; + boolean oldValue = mBackend.isWhitelisted(mPackageName); + if (newValue != oldValue) { + if (newValue) { + mBackend.addApp(mPackageName); + } else { + mBackend.removeApp(mPackageName); + } + } } else { - mBackend.removeApp(mPackageName); + mSelectedIndex = which; } - return true; - } - - @Override - protected AlertDialog createDialog(int id, int errorCode) { - return null; - } - - @Override - protected int getMetricsCategory() { - return MetricsLogger.FUELGAUGE_HIGH_POWER_DETAILS; } public static CharSequence getSummary(Context context, AppEntry entry) { @@ -81,4 +106,36 @@ public class HighPowerDetail extends AppInfoWithHeader implements OnPreferenceCh ? R.string.high_power_on : R.string.high_power_off); } + public static void show(Activity activity, String packageName) { + HighPowerDetail fragment = new HighPowerDetail(); + Bundle args = new Bundle(); + args.putString(AppInfoBase.ARG_PACKAGE_NAME, packageName); + fragment.setArguments(args); + fragment.show(activity.getFragmentManager(), HighPowerDetail.class.getSimpleName()); + } + + private class Adapter extends ArrayAdapter<Pair<String, String>> { + private final SparseBooleanArray mEnabled = new SparseBooleanArray(); + + public Adapter(Context context, int resource) { + super(context, resource, android.R.id.title); + } + + public void setEnabled(int index, boolean enabled) { + mEnabled.put(index, enabled); + } + + public boolean isEnabled(int position) { + return mEnabled.get(position, true); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View view = super.getView(position, convertView, parent); + ((TextView) view.findViewById(android.R.id.title)).setText(getItem(position).first); + ((TextView) view.findViewById(android.R.id.summary)).setText(getItem(position).second); + view.setEnabled(isEnabled(position)); + return view; + } + } } |