Add action to open the anomaly detail page

This action is used to go to the anomaly detail page.
This cl also refactored the RestrictedAppDetails to take AppInfo
as the input, not AppOpsManager.PackageOps.

Bug: 72385333
Test: RunSettingsRoboTests

Change-Id: I5b4481091635e1250629ea21c2b650db929c18ed
This commit is contained in:
jackqdyulei
2018-02-08 15:13:57 -08:00
parent c07124feeb
commit 1b472be833
9 changed files with 234 additions and 38 deletions

View File

@@ -17,6 +17,7 @@
package com.android.settings.fuelgauge;
import android.app.AppOpsManager;
import android.app.Fragment;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
@@ -35,6 +36,7 @@ import com.android.settings.Utils;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.fuelgauge.batterytip.AppInfo;
import com.android.settings.widget.AppCheckBoxPreference;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -47,11 +49,12 @@ public class RestrictedAppDetails extends DashboardFragment {
public static final String TAG = "RestrictedAppDetails";
private static final String EXTRA_PACKAGE_OPS_LIST = "package_ops_list";
@VisibleForTesting
static final String EXTRA_APP_INFO_LIST = "app_info_list";
private static final String KEY_PREF_RESTRICTED_APP_LIST = "restrict_app_list";
@VisibleForTesting
List<AppOpsManager.PackageOps> mPackageOpsList;
List<AppInfo> mAppInfos;
@VisibleForTesting
IconDrawableFactory mIconDrawableFactory;
@VisibleForTesting
@@ -62,9 +65,9 @@ public class RestrictedAppDetails extends DashboardFragment {
PackageManager mPackageManager;
public static void startRestrictedAppDetails(SettingsActivity caller,
InstrumentedPreferenceFragment fragment, List<AppOpsManager.PackageOps> packageOpsList) {
InstrumentedPreferenceFragment fragment, List<AppInfo> appInfos) {
final Bundle args = new Bundle();
args.putParcelableList(EXTRA_PACKAGE_OPS_LIST, packageOpsList);
args.putParcelableList(EXTRA_APP_INFO_LIST, appInfos);
new SubSettingLauncher(caller)
.setDestination(RestrictedAppDetails.class.getName())
@@ -80,7 +83,7 @@ public class RestrictedAppDetails extends DashboardFragment {
final Context context = getContext();
mRestrictedAppListGroup = (PreferenceGroup) findPreference(KEY_PREF_RESTRICTED_APP_LIST);
mPackageOpsList = getArguments().getParcelableArrayList(EXTRA_PACKAGE_OPS_LIST);
mAppInfos = getArguments().getParcelableArrayList(EXTRA_APP_INFO_LIST);
mPackageManager = context.getPackageManager();
mIconDrawableFactory = IconDrawableFactory.newInstance(context);
mBatteryUtils = BatteryUtils.getInstance(context);
@@ -119,19 +122,20 @@ public class RestrictedAppDetails extends DashboardFragment {
mRestrictedAppListGroup.removeAll();
final Context context = getPrefContext();
for (int i = 0, size = mPackageOpsList.size(); i < size; i++) {
for (int i = 0, size = mAppInfos.size(); i < size; i++) {
final CheckBoxPreference checkBoxPreference = new AppCheckBoxPreference(context);
final AppOpsManager.PackageOps packageOps = mPackageOpsList.get(i);
final AppInfo appInfo = mAppInfos.get(i);
try {
final ApplicationInfo applicationInfo = mPackageManager.getApplicationInfo(
packageOps.getPackageName(), 0 /* flags */);
appInfo.packageName, 0 /* flags */);
checkBoxPreference.setChecked(true);
checkBoxPreference.setTitle(mPackageManager.getApplicationLabel(applicationInfo));
checkBoxPreference.setKey(packageOps.getPackageName());
checkBoxPreference.setKey(appInfo.packageName);
checkBoxPreference.setIcon(
Utils.getBadgedIcon(mIconDrawableFactory, mPackageManager,
packageOps.getPackageName(),
UserHandle.getUserId(packageOps.getUid())));
appInfo.packageName,
UserHandle.getUserId(
mBatteryUtils.getPackageUid(appInfo.packageName))));
checkBoxPreference.setOnPreferenceChangeListener((pref, value) -> {
// change the toggle
final int mode = (Boolean) value ? AppOpsManager.MODE_IGNORED