From 5ac5b85d2a8376f1b4dda7c9dfa0a33fe70b5aa0 Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Mon, 22 Jan 2018 17:48:04 -0800 Subject: [PATCH] Add icon in RestrictedAppDetails use preference_app to make sure the app icon is 24dp. Bug: 71502850 Test: Screenshot | RunSettingsRoboTests Change-Id: I0d7704246299201e72b991f199f9ddd2f224a8a3 --- .../fuelgauge/RestrictedAppDetails.java | 12 ++--- .../widget/AppCheckBoxPreference.java | 38 +++++++++++++ .../fuelgauge/RestrictedAppDetailsTest.java | 4 ++ .../widget/AppCheckBoxPreferenceTest.java | 53 +++++++++++++++++++ 4 files changed, 101 insertions(+), 6 deletions(-) create mode 100644 src/com/android/settings/widget/AppCheckBoxPreference.java create mode 100644 tests/robotests/src/com/android/settings/widget/AppCheckBoxPreferenceTest.java diff --git a/src/com/android/settings/fuelgauge/RestrictedAppDetails.java b/src/com/android/settings/fuelgauge/RestrictedAppDetails.java index bdaaa3a66a9..e09a8a38c84 100644 --- a/src/com/android/settings/fuelgauge/RestrictedAppDetails.java +++ b/src/com/android/settings/fuelgauge/RestrictedAppDetails.java @@ -20,11 +20,9 @@ import android.app.AppOpsManager; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; -import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.UserHandle; import android.support.v14.preference.PreferenceFragment; -import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.CheckBoxPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceGroup; @@ -36,9 +34,7 @@ import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.Utils; import com.android.settings.dashboard.DashboardFragment; -import com.android.settings.fuelgauge.anomaly.Anomaly; -import com.android.settings.fuelgauge.anomaly.AnomalyDialogFragment; -import com.android.settings.fuelgauge.anomaly.AnomalyPreference; +import com.android.settings.widget.AppCheckBoxPreference; import com.android.settingslib.core.AbstractPreferenceController; import java.util.List; @@ -120,7 +116,7 @@ public class RestrictedAppDetails extends DashboardFragment { final Context context = getPrefContext(); for (int i = 0, size = mPackageOpsList.size(); i < size; i++) { - final CheckBoxPreference checkBoxPreference = new CheckBoxPreference(context); + final CheckBoxPreference checkBoxPreference = new AppCheckBoxPreference(context); final AppOpsManager.PackageOps packageOps = mPackageOpsList.get(i); try { final ApplicationInfo applicationInfo = mPackageManager.getApplicationInfo( @@ -128,6 +124,10 @@ public class RestrictedAppDetails extends DashboardFragment { checkBoxPreference.setChecked(true); checkBoxPreference.setTitle(mPackageManager.getApplicationLabel(applicationInfo)); checkBoxPreference.setKey(packageOps.getPackageName()); + checkBoxPreference.setIcon( + Utils.getBadgedIcon(mIconDrawableFactory, mPackageManager, + packageOps.getPackageName(), + UserHandle.getUserId(packageOps.getUid()))); checkBoxPreference.setOnPreferenceChangeListener((pref, value) -> { // change the toggle final int mode = (Boolean) value ? AppOpsManager.MODE_IGNORED diff --git a/src/com/android/settings/widget/AppCheckBoxPreference.java b/src/com/android/settings/widget/AppCheckBoxPreference.java new file mode 100644 index 00000000000..9cb1d78163d --- /dev/null +++ b/src/com/android/settings/widget/AppCheckBoxPreference.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.widget; + +import android.content.Context; +import android.support.v7.preference.CheckBoxPreference; +import android.util.AttributeSet; + +import com.android.settings.R; + +/** + * {@link CheckBoxPreference} that used only to display app + */ +public class AppCheckBoxPreference extends CheckBoxPreference { + public AppCheckBoxPreference(Context context, AttributeSet attrs) { + super(context, attrs); + setLayoutResource(R.layout.preference_app); + } + + public AppCheckBoxPreference(Context context) { + super(context); + setLayoutResource(R.layout.preference_app); + } +} diff --git a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java index a9de06176b4..521ead4d337 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java @@ -28,6 +28,7 @@ import android.content.pm.PackageManager; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceManager; +import android.util.IconDrawableFactory; import com.android.settings.TestConfig; @@ -53,6 +54,8 @@ public class RestrictedAppDetailsTest { private PackageManager mPackageManager; @Mock private ApplicationInfo mApplicationInfo; + @Mock + private IconDrawableFactory mIconDrawableFactory; @Mock(answer = Answers.RETURNS_DEEP_STUBS) private PreferenceManager mPreferenceManager; private RestrictedAppDetails mFragment; @@ -68,6 +71,7 @@ public class RestrictedAppDetailsTest { doReturn(mPreferenceManager).when(mFragment).getPreferenceManager(); doReturn(mContext).when(mPreferenceManager).getContext(); mFragment.mPackageManager = mPackageManager; + mFragment.mIconDrawableFactory = mIconDrawableFactory; mFragment.mPackageOpsList = new ArrayList<>(); mFragment.mPackageOpsList.add( new AppOpsManager.PackageOps(PACKAGE_NAME, UID, null /* entries */)); diff --git a/tests/robotests/src/com/android/settings/widget/AppCheckBoxPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/AppCheckBoxPreferenceTest.java new file mode 100644 index 00000000000..d540a62ec7e --- /dev/null +++ b/tests/robotests/src/com/android/settings/widget/AppCheckBoxPreferenceTest.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.widget; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.Context; + +import com.android.settings.R; +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class AppCheckBoxPreferenceTest { + + private Context mContext; + private AppCheckBoxPreference mPreference; + private AppCheckBoxPreference mAttrPreference; + + @Before + public void setUp() { + mContext = RuntimeEnvironment.application; + mPreference = new AppCheckBoxPreference(mContext); + mAttrPreference = new AppCheckBoxPreference(mContext, null /* attrs */); + } + + @Test + public void testGetLayoutResource() { + assertThat(mPreference.getLayoutResource()).isEqualTo(R.layout.preference_app); + assertThat(mAttrPreference.getLayoutResource()).isEqualTo(R.layout.preference_app); + } +}