Loading src/com/android/settings/enterprise/DevicePolicyManagerWrapper.java +21 −0 Original line number Diff line number Diff line Loading @@ -129,4 +129,25 @@ public interface DevicePolicyManagerWrapper { * @see android.app.admin.DevicePolicyManager#getOwnerInstalledCaCerts */ List<String> getOwnerInstalledCaCerts(@NonNull UserHandle user); /** * Calls {@code DevicePolicyManager.isDeviceOwnerAppOnAnyUser()}. * * @see android.app.admin.DevicePolicyManager#isDeviceOwnerAppOnAnyUser */ boolean isDeviceOwnerAppOnAnyUser(String packageName); /** * Calls {@code DevicePolicyManager.packageHasActiveAdmins()}. * * @see android.app.admin.DevicePolicyManager#packageHasActiveAdmins */ boolean packageHasActiveAdmins(String packageName); /** * Calls {@code DevicePolicyManager.isUninstallInQueue()}. * * @see android.app.admin.DevicePolicyManager#isUninstallInQueue */ boolean isUninstallInQueue(String packageName); } src/com/android/settings/enterprise/DevicePolicyManagerWrapperImpl.java +15 −0 Original line number Diff line number Diff line Loading @@ -101,4 +101,19 @@ public class DevicePolicyManagerWrapperImpl implements DevicePolicyManagerWrappe public List<String> getOwnerInstalledCaCerts(@NonNull UserHandle user) { return mDpm.getOwnerInstalledCaCerts(user); } @Override public boolean isDeviceOwnerAppOnAnyUser(String packageName) { return mDpm.isDeviceOwnerAppOnAnyUser(packageName); } @Override public boolean packageHasActiveAdmins(String packageName) { return mDpm.packageHasActiveAdmins(packageName); } @Override public boolean isUninstallInQueue(String packageName) { return mDpm.isUninstallInQueue(packageName); } } src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +57 −5 Original line number Diff line number Diff line Loading @@ -16,11 +16,19 @@ package com.android.settings.fuelgauge; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.os.BatteryStats; import android.os.Bundle; import android.os.SystemClock; import android.os.UserHandle; import android.os.UserManager; import android.support.annotation.VisibleForTesting; import android.support.v14.preference.PreferenceFragment; import android.support.v7.preference.Preference; Loading @@ -36,6 +44,8 @@ import com.android.settings.Utils; import com.android.settings.applications.AppHeaderController; import com.android.settings.applications.LayoutPreference; import com.android.settings.core.PreferenceController; import com.android.settings.enterprise.DevicePolicyManagerWrapper; import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.applications.ApplicationsState; Loading @@ -50,7 +60,8 @@ import java.util.List; * * This fragment will replace {@link PowerUsageDetail} */ public class AdvancedPowerUsageDetail extends PowerUsageBase { public class AdvancedPowerUsageDetail extends PowerUsageBase implements ButtonActionDialogFragment.AppButtonsDialogListener { public static final String TAG = "AdvancedPowerUsageDetail"; public static final String EXTRA_UID = "extra_uid"; Loading @@ -67,6 +78,9 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase { private static final String KEY_PREF_POWER_USAGE = "app_power_usage"; private static final String KEY_PREF_HEADER = "header_view"; private static final int REQUEST_UNINSTALL = 0; private static final int REQUEST_REMOVE_DEVICE_ADMIN = 1; @VisibleForTesting LayoutPreference mHeaderPreference; @VisibleForTesting Loading @@ -77,6 +91,11 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase { private Preference mForegroundPreference; private Preference mBackgroundPreference; private Preference mPowerUsagePreference; private AppButtonsPreferenceController mAppButtonsPreferenceController; private DevicePolicyManagerWrapper mDpm; private UserManager mUserManager; private PackageManager mPackageManager; public static void startBatteryDetailPage(SettingsActivity caller, PreferenceFragment fragment, BatteryStatsHelper helper, int which, BatteryEntry entry, String usagePercent) { Loading Loading @@ -112,6 +131,17 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase { R.string.battery_details_title, null, new UserHandle(UserHandle.myUserId())); } @Override public void onAttach(Activity activity) { super.onAttach(activity); mState = ApplicationsState.getInstance(getActivity().getApplication()); mDpm = new DevicePolicyManagerWrapperImpl( (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE)); mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE); mPackageManager = activity.getPackageManager(); } @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); Loading @@ -120,7 +150,6 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase { mBackgroundPreference = findPreference(KEY_PREF_BACKGROUND); mPowerUsagePreference = findPreference(KEY_PREF_POWER_USAGE); mHeaderPreference = (LayoutPreference) findPreference(KEY_PREF_HEADER); mState = ApplicationsState.getInstance(getActivity().getApplication()); final String packageName = getArguments().getString(EXTRA_PACKAGE_NAME); if (packageName != null) { Loading Loading @@ -160,7 +189,13 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase { if (mAppEntry == null) { controller.setLabel(bundle.getString(EXTRA_LABEL)); controller.setIcon(getContext().getDrawable(bundle.getInt(EXTRA_ICON_ID))); final int iconId = bundle.getInt(EXTRA_ICON_ID, 0); if (iconId == 0) { controller.setIcon(context.getPackageManager().getDefaultActivityIcon()); } else { controller.setIcon(context.getDrawable(bundle.getInt(EXTRA_ICON_ID))); } } else { mState.ensureIcon(mAppEntry); controller.setLabel(mAppEntry); Loading Loading @@ -196,9 +231,26 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase { controllers.add(new BackgroundActivityPreferenceController(context, uid)); controllers.add(new BatteryOptimizationPreferenceController( (SettingsActivity) getActivity(), this)); controllers.add( new AppButtonsPreferenceController(getActivity(), getLifecycle(), packageName)); mAppButtonsPreferenceController = new AppButtonsPreferenceController( (SettingsActivity) getActivity(), this, getLifecycle(), packageName, mState, mDpm, mUserManager, mPackageManager, REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN); controllers.add(mAppButtonsPreferenceController); return controllers; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (mAppButtonsPreferenceController != null) { mAppButtonsPreferenceController.handleActivityResult(requestCode, resultCode, data); } } @Override public void handleDialogClick(int id) { if (mAppButtonsPreferenceController != null) { mAppButtonsPreferenceController.handleDialogClick(id); } } } src/com/android/settings/fuelgauge/AppButtonsPreferenceController.java +628 −12 File changed.Preview size limit exceeded, changes collapsed. Show changes src/com/android/settings/fuelgauge/ButtonActionDialogFragment.java 0 → 100644 +104 −0 Original line number Diff line number Diff line package com.android.settings.fuelgauge; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.IntDef; import android.support.annotation.VisibleForTesting; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Fragment to show the dialog for uninstall or forcestop. This fragment uses function in * target fragment to handle the dialog button click. */ public class ButtonActionDialogFragment extends InstrumentedDialogFragment implements DialogInterface.OnClickListener { /** * Interface to handle the dialog click */ interface AppButtonsDialogListener { void handleDialogClick(int type); } @Retention(RetentionPolicy.SOURCE) @IntDef({ DialogType.DISABLE, DialogType.SPECIAL_DISABLE, DialogType.FORCE_STOP }) public @interface DialogType { int DISABLE = 0; int SPECIAL_DISABLE = 1; int FORCE_STOP = 2; } private static final String ARG_ID = "id"; @VisibleForTesting int mId; public static ButtonActionDialogFragment newInstance(@DialogType int id) { ButtonActionDialogFragment dialogFragment = new ButtonActionDialogFragment(); Bundle args = new Bundle(1); args.putInt(ARG_ID, id); dialogFragment.setArguments(args); return dialogFragment; } @Override public int getMetricsCategory() { //TODO(35810915): update the metrics label because for now this fragment will be shown // in two screens return MetricsProto.MetricsEvent.DIALOG_APP_INFO_ACTION; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Bundle bundle = getArguments(); mId = bundle.getInt(ARG_ID); Dialog dialog = createDialog(mId); if (dialog == null) { throw new IllegalArgumentException("unknown id " + mId); } return dialog; } @Override public void onClick(DialogInterface dialog, int which) { final AppButtonsDialogListener lsn = (AppButtonsDialogListener) getTargetFragment(); lsn.handleDialogClick(mId); } private AlertDialog createDialog(int id) { final Context context = getContext(); switch (id) { case DialogType.DISABLE: case DialogType.SPECIAL_DISABLE: return new AlertDialog.Builder(context) .setMessage(R.string.app_disable_dlg_text) .setPositiveButton(R.string.app_disable_dlg_positive, this) .setNegativeButton(R.string.dlg_cancel, null) .create(); case DialogType.FORCE_STOP: return new AlertDialog.Builder(context) .setTitle(R.string.force_stop_dlg_title) .setMessage(R.string.force_stop_dlg_text) .setPositiveButton(R.string.dlg_ok, this) .setNegativeButton(R.string.dlg_cancel, null) .create(); } return null; } } Loading
src/com/android/settings/enterprise/DevicePolicyManagerWrapper.java +21 −0 Original line number Diff line number Diff line Loading @@ -129,4 +129,25 @@ public interface DevicePolicyManagerWrapper { * @see android.app.admin.DevicePolicyManager#getOwnerInstalledCaCerts */ List<String> getOwnerInstalledCaCerts(@NonNull UserHandle user); /** * Calls {@code DevicePolicyManager.isDeviceOwnerAppOnAnyUser()}. * * @see android.app.admin.DevicePolicyManager#isDeviceOwnerAppOnAnyUser */ boolean isDeviceOwnerAppOnAnyUser(String packageName); /** * Calls {@code DevicePolicyManager.packageHasActiveAdmins()}. * * @see android.app.admin.DevicePolicyManager#packageHasActiveAdmins */ boolean packageHasActiveAdmins(String packageName); /** * Calls {@code DevicePolicyManager.isUninstallInQueue()}. * * @see android.app.admin.DevicePolicyManager#isUninstallInQueue */ boolean isUninstallInQueue(String packageName); }
src/com/android/settings/enterprise/DevicePolicyManagerWrapperImpl.java +15 −0 Original line number Diff line number Diff line Loading @@ -101,4 +101,19 @@ public class DevicePolicyManagerWrapperImpl implements DevicePolicyManagerWrappe public List<String> getOwnerInstalledCaCerts(@NonNull UserHandle user) { return mDpm.getOwnerInstalledCaCerts(user); } @Override public boolean isDeviceOwnerAppOnAnyUser(String packageName) { return mDpm.isDeviceOwnerAppOnAnyUser(packageName); } @Override public boolean packageHasActiveAdmins(String packageName) { return mDpm.packageHasActiveAdmins(packageName); } @Override public boolean isUninstallInQueue(String packageName) { return mDpm.isUninstallInQueue(packageName); } }
src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +57 −5 Original line number Diff line number Diff line Loading @@ -16,11 +16,19 @@ package com.android.settings.fuelgauge; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.os.BatteryStats; import android.os.Bundle; import android.os.SystemClock; import android.os.UserHandle; import android.os.UserManager; import android.support.annotation.VisibleForTesting; import android.support.v14.preference.PreferenceFragment; import android.support.v7.preference.Preference; Loading @@ -36,6 +44,8 @@ import com.android.settings.Utils; import com.android.settings.applications.AppHeaderController; import com.android.settings.applications.LayoutPreference; import com.android.settings.core.PreferenceController; import com.android.settings.enterprise.DevicePolicyManagerWrapper; import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.applications.ApplicationsState; Loading @@ -50,7 +60,8 @@ import java.util.List; * * This fragment will replace {@link PowerUsageDetail} */ public class AdvancedPowerUsageDetail extends PowerUsageBase { public class AdvancedPowerUsageDetail extends PowerUsageBase implements ButtonActionDialogFragment.AppButtonsDialogListener { public static final String TAG = "AdvancedPowerUsageDetail"; public static final String EXTRA_UID = "extra_uid"; Loading @@ -67,6 +78,9 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase { private static final String KEY_PREF_POWER_USAGE = "app_power_usage"; private static final String KEY_PREF_HEADER = "header_view"; private static final int REQUEST_UNINSTALL = 0; private static final int REQUEST_REMOVE_DEVICE_ADMIN = 1; @VisibleForTesting LayoutPreference mHeaderPreference; @VisibleForTesting Loading @@ -77,6 +91,11 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase { private Preference mForegroundPreference; private Preference mBackgroundPreference; private Preference mPowerUsagePreference; private AppButtonsPreferenceController mAppButtonsPreferenceController; private DevicePolicyManagerWrapper mDpm; private UserManager mUserManager; private PackageManager mPackageManager; public static void startBatteryDetailPage(SettingsActivity caller, PreferenceFragment fragment, BatteryStatsHelper helper, int which, BatteryEntry entry, String usagePercent) { Loading Loading @@ -112,6 +131,17 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase { R.string.battery_details_title, null, new UserHandle(UserHandle.myUserId())); } @Override public void onAttach(Activity activity) { super.onAttach(activity); mState = ApplicationsState.getInstance(getActivity().getApplication()); mDpm = new DevicePolicyManagerWrapperImpl( (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE)); mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE); mPackageManager = activity.getPackageManager(); } @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); Loading @@ -120,7 +150,6 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase { mBackgroundPreference = findPreference(KEY_PREF_BACKGROUND); mPowerUsagePreference = findPreference(KEY_PREF_POWER_USAGE); mHeaderPreference = (LayoutPreference) findPreference(KEY_PREF_HEADER); mState = ApplicationsState.getInstance(getActivity().getApplication()); final String packageName = getArguments().getString(EXTRA_PACKAGE_NAME); if (packageName != null) { Loading Loading @@ -160,7 +189,13 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase { if (mAppEntry == null) { controller.setLabel(bundle.getString(EXTRA_LABEL)); controller.setIcon(getContext().getDrawable(bundle.getInt(EXTRA_ICON_ID))); final int iconId = bundle.getInt(EXTRA_ICON_ID, 0); if (iconId == 0) { controller.setIcon(context.getPackageManager().getDefaultActivityIcon()); } else { controller.setIcon(context.getDrawable(bundle.getInt(EXTRA_ICON_ID))); } } else { mState.ensureIcon(mAppEntry); controller.setLabel(mAppEntry); Loading Loading @@ -196,9 +231,26 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase { controllers.add(new BackgroundActivityPreferenceController(context, uid)); controllers.add(new BatteryOptimizationPreferenceController( (SettingsActivity) getActivity(), this)); controllers.add( new AppButtonsPreferenceController(getActivity(), getLifecycle(), packageName)); mAppButtonsPreferenceController = new AppButtonsPreferenceController( (SettingsActivity) getActivity(), this, getLifecycle(), packageName, mState, mDpm, mUserManager, mPackageManager, REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN); controllers.add(mAppButtonsPreferenceController); return controllers; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (mAppButtonsPreferenceController != null) { mAppButtonsPreferenceController.handleActivityResult(requestCode, resultCode, data); } } @Override public void handleDialogClick(int id) { if (mAppButtonsPreferenceController != null) { mAppButtonsPreferenceController.handleDialogClick(id); } } }
src/com/android/settings/fuelgauge/AppButtonsPreferenceController.java +628 −12 File changed.Preview size limit exceeded, changes collapsed. Show changes
src/com/android/settings/fuelgauge/ButtonActionDialogFragment.java 0 → 100644 +104 −0 Original line number Diff line number Diff line package com.android.settings.fuelgauge; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.IntDef; import android.support.annotation.VisibleForTesting; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Fragment to show the dialog for uninstall or forcestop. This fragment uses function in * target fragment to handle the dialog button click. */ public class ButtonActionDialogFragment extends InstrumentedDialogFragment implements DialogInterface.OnClickListener { /** * Interface to handle the dialog click */ interface AppButtonsDialogListener { void handleDialogClick(int type); } @Retention(RetentionPolicy.SOURCE) @IntDef({ DialogType.DISABLE, DialogType.SPECIAL_DISABLE, DialogType.FORCE_STOP }) public @interface DialogType { int DISABLE = 0; int SPECIAL_DISABLE = 1; int FORCE_STOP = 2; } private static final String ARG_ID = "id"; @VisibleForTesting int mId; public static ButtonActionDialogFragment newInstance(@DialogType int id) { ButtonActionDialogFragment dialogFragment = new ButtonActionDialogFragment(); Bundle args = new Bundle(1); args.putInt(ARG_ID, id); dialogFragment.setArguments(args); return dialogFragment; } @Override public int getMetricsCategory() { //TODO(35810915): update the metrics label because for now this fragment will be shown // in two screens return MetricsProto.MetricsEvent.DIALOG_APP_INFO_ACTION; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Bundle bundle = getArguments(); mId = bundle.getInt(ARG_ID); Dialog dialog = createDialog(mId); if (dialog == null) { throw new IllegalArgumentException("unknown id " + mId); } return dialog; } @Override public void onClick(DialogInterface dialog, int which) { final AppButtonsDialogListener lsn = (AppButtonsDialogListener) getTargetFragment(); lsn.handleDialogClick(mId); } private AlertDialog createDialog(int id) { final Context context = getContext(); switch (id) { case DialogType.DISABLE: case DialogType.SPECIAL_DISABLE: return new AlertDialog.Builder(context) .setMessage(R.string.app_disable_dlg_text) .setPositiveButton(R.string.app_disable_dlg_positive, this) .setNegativeButton(R.string.dlg_cancel, null) .create(); case DialogType.FORCE_STOP: return new AlertDialog.Builder(context) .setTitle(R.string.force_stop_dlg_title) .setMessage(R.string.force_stop_dlg_text) .setPositiveButton(R.string.dlg_ok, this) .setNegativeButton(R.string.dlg_cancel, null) .create(); } return null; } }