From d79cc0de928beb65ca7201f2688af6c51056ebed Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Tue, 14 Nov 2017 11:10:08 -0800 Subject: [PATCH 01/10] Update the way OMS records details about overlays Use newly added getter methods instead of relying on internal state. Bug: 69383160 Test: builds and unit test passes Change-Id: Ic09ae1086c7afa039b5df11e4c8c968125784586 --- .../android/settings/display/ThemePreferenceController.java | 2 +- .../settings/display/ThemePreferenceControllerTest.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/display/ThemePreferenceController.java b/src/com/android/settings/display/ThemePreferenceController.java index 3bb58b15d0c..d1341dd7435 100644 --- a/src/com/android/settings/display/ThemePreferenceController.java +++ b/src/com/android/settings/display/ThemePreferenceController.java @@ -125,7 +125,7 @@ public class ThemePreferenceController extends AbstractPreferenceController impl private boolean isChangeableOverlay(String packageName) { try { PackageInfo pi = mPackageManager.getPackageInfo(packageName, 0); - return pi != null && !pi.isStaticOverlay; + return pi != null && !pi.isStaticOverlayPackage(); } catch (PackageManager.NameNotFoundException e) { return false; } diff --git a/tests/unit/src/com/android/settings/display/ThemePreferenceControllerTest.java b/tests/unit/src/com/android/settings/display/ThemePreferenceControllerTest.java index 69c8c54c672..fe8203c2b72 100644 --- a/tests/unit/src/com/android/settings/display/ThemePreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/display/ThemePreferenceControllerTest.java @@ -118,8 +118,8 @@ public class ThemePreferenceControllerTest { } return info; }); - PackageInfo pi = new PackageInfo(); - pi.isStaticOverlay = true; + PackageInfo pi = mock(PackageInfo.class); + when(pi.isStaticOverlayPackage()).thenReturn(true); when(mMockPackageManager.getPackageInfo(eq("com.android.Theme1"), anyInt())).thenReturn(pi); when(mMockPackageManager.getPackageInfo(eq("com.android.Theme2"), anyInt())).thenReturn( new PackageInfo()); From f5276841838f4a05c079457ecf7739b0822e9deb Mon Sep 17 00:00:00 2001 From: Matthew Fritze Date: Tue, 5 Dec 2017 11:13:10 -0800 Subject: [PATCH 02/10] Remove Slice getter from BasePreferenceController After working through a prototype here: (ag/3324435) it is clear that we don't need the controller to provider the slice. We will build an index that will contain sufficent UI information, and a reference to the controller. At Slice Bind time, we can get the curret value from the controller, and the UI information from the Index. Bug: 67996923 Test: robotests Change-Id: Id43a51bcd73051bc719cd5829907583e0edf23b2 --- .../appinfo/AppBatteryPreferenceController.java | 6 ------ .../appinfo/AppInfoPreferenceControllerBase.java | 6 ------ .../appinfo/AppMemoryPreferenceController.java | 6 ------ .../AppPermissionPreferenceController.java | 2 -- ...efaultAppShortcutPreferenceControllerBase.java | 5 ----- .../settings/core/BasePreferenceController.java | 15 --------------- .../settings/core/TogglePreferenceController.java | 7 ------- .../core/BasePreferenceControllerTest.java | 2 +- 8 files changed, 1 insertion(+), 48 deletions(-) diff --git a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java index d341d53fc18..017afe75479 100644 --- a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java @@ -17,7 +17,6 @@ package com.android.settings.applications.appinfo; import android.app.LoaderManager; -import android.app.slice.Slice; import android.content.Context; import android.content.Loader; import android.content.pm.PackageInfo; @@ -81,11 +80,6 @@ public class AppBatteryPreferenceController extends BasePreferenceController return AVAILABLE; } - @Override - public Slice getSettingSlice() { - return null; - } - @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); diff --git a/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBase.java b/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBase.java index 0d6c03815d8..eac0a0c94c5 100644 --- a/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBase.java +++ b/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBase.java @@ -16,7 +16,6 @@ package com.android.settings.applications.appinfo; -import android.app.slice.Slice; import android.content.Context; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; @@ -50,11 +49,6 @@ public abstract class AppInfoPreferenceControllerBase extends BasePreferenceCont return AVAILABLE; } - @Override - public Slice getSettingSlice() { - return null; - } - @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); diff --git a/src/com/android/settings/applications/appinfo/AppMemoryPreferenceController.java b/src/com/android/settings/applications/appinfo/AppMemoryPreferenceController.java index 2a20f809f7b..3943041b2fd 100644 --- a/src/com/android/settings/applications/appinfo/AppMemoryPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppMemoryPreferenceController.java @@ -17,7 +17,6 @@ package com.android.settings.applications.appinfo; import android.app.Activity; -import android.app.slice.Slice; import android.content.Context; import android.content.pm.PackageInfo; import android.os.AsyncTask; @@ -110,11 +109,6 @@ public class AppMemoryPreferenceController extends BasePreferenceController ? AVAILABLE : DISABLED_DEPENDENT_SETTING; } - @Override - public Slice getSettingSlice() { - return null; - } - @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); diff --git a/src/com/android/settings/applications/appinfo/AppPermissionPreferenceController.java b/src/com/android/settings/applications/appinfo/AppPermissionPreferenceController.java index bd309c67a3a..815e8d854c2 100644 --- a/src/com/android/settings/applications/appinfo/AppPermissionPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppPermissionPreferenceController.java @@ -23,13 +23,11 @@ import android.content.res.Resources; import android.icu.text.ListFormatter; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceScreen; import android.util.Log; import com.android.settings.R; import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settingslib.applications.PermissionsSummaryHelper; -import com.android.settingslib.core.AbstractPreferenceController; import java.util.ArrayList; import java.util.List; diff --git a/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java b/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java index 3311daa9f11..fa67ec82162 100644 --- a/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java +++ b/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java @@ -50,11 +50,6 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre return hasAppCapability() ? AVAILABLE : DISABLED_UNSUPPORTED; } - @Override - public Slice getSettingSlice() { - return null; - } - @Override public void updateState(Preference preference) { preference.setSummary(isDefaultApp() ? R.string.yes : R.string.no); diff --git a/src/com/android/settings/core/BasePreferenceController.java b/src/com/android/settings/core/BasePreferenceController.java index b3d9878608e..01d98b83454 100644 --- a/src/com/android/settings/core/BasePreferenceController.java +++ b/src/com/android/settings/core/BasePreferenceController.java @@ -14,14 +14,10 @@ package com.android.settings.core; import android.annotation.IntDef; -import android.app.slice.Slice; import android.content.Context; -import android.support.v7.preference.Preference; import android.text.TextUtils; import android.util.Log; - -import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.search.ResultPayload; import com.android.settings.search.SearchIndexableRaw; import com.android.settingslib.core.AbstractPreferenceController; @@ -88,11 +84,6 @@ public abstract class BasePreferenceController extends AbstractPreferenceControl @AvailabilityStatus public abstract int getAvailabilityStatus(); - /** - * @return A slice for the corresponding setting. - */ - public abstract Slice getSettingSlice(); - @Override public String getPreferenceKey() { return mPreferenceKey; @@ -150,10 +141,4 @@ public abstract class BasePreferenceController extends AbstractPreferenceControl public ResultPayload getResultPayload() { return null; } - - // TODO (b/69380366) Add Method to get preference UI - - // TODO (b/69380464) Add method to get intent - - // TODO (b/69380560) Add method to get broadcast intent } \ No newline at end of file diff --git a/src/com/android/settings/core/TogglePreferenceController.java b/src/com/android/settings/core/TogglePreferenceController.java index 03106d3204a..99d2eccd1bc 100644 --- a/src/com/android/settings/core/TogglePreferenceController.java +++ b/src/com/android/settings/core/TogglePreferenceController.java @@ -13,7 +13,6 @@ */ package com.android.settings.core; -import android.app.slice.Slice; import android.content.Context; import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.Preference; @@ -55,10 +54,4 @@ public abstract class TogglePreferenceController extends BasePreferenceControlle setChecked(auto); return true; } - - @Override - public Slice getSettingSlice() { - // TODO - return null; - } } \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/core/BasePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/core/BasePreferenceControllerTest.java index 54b58d12c94..da2197c93b5 100644 --- a/tests/robotests/src/com/android/settings/core/BasePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/core/BasePreferenceControllerTest.java @@ -117,4 +117,4 @@ public class BasePreferenceControllerTest { assertThat(mPreferenceController.isSupported()).isTrue(); } -} +} \ No newline at end of file From ea63e4c6c6b0b89d50be8b804f4b27715ad534c4 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 8 Dec 2017 09:35:03 -0800 Subject: [PATCH 03/10] Clearing task when opening home settings in case it is already in the same task Test: Manually tested on device Bug: 69960568 Change-Id: If9de28936a7156c4d9c68c85c168ff4aa7492151 --- .../defaultapps/DefaultHomePreferenceController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java index a7d65d33777..94aa6089b07 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java +++ b/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java @@ -100,7 +100,7 @@ public class DefaultHomePreferenceController extends DefaultAppPreferenceControl Intent intent = new Intent(Intent.ACTION_APPLICATION_PREFERENCES) .setPackage(packageName) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); return mPackageManager.queryIntentActivities(intent, 0).size() == 1 ? intent : null; } From 6df7a52011a7708a555597cf14b067e51d289e1d Mon Sep 17 00:00:00 2001 From: Aurimas Liutikas Date: Sat, 9 Dec 2017 19:01:16 +0000 Subject: [PATCH 04/10] Disable crashing ExternalSourcesSettingsTest#testManageExternalSourcesForApp Bug: 70383636 Change-Id: If542ef48d54959b3cc6c9fb07ddf07977fe40a8b --- .../settings/applications/ExternalSourcesSettingsTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/unit/src/com/android/settings/applications/ExternalSourcesSettingsTest.java b/tests/unit/src/com/android/settings/applications/ExternalSourcesSettingsTest.java index 82f0e0a8199..f7e956b3205 100644 --- a/tests/unit/src/com/android/settings/applications/ExternalSourcesSettingsTest.java +++ b/tests/unit/src/com/android/settings/applications/ExternalSourcesSettingsTest.java @@ -37,6 +37,7 @@ import android.os.UserManager; import android.provider.Settings; import android.support.test.InstrumentationRegistry; import android.support.test.filters.LargeTest; +import android.support.test.filters.Suppress; import android.support.test.runner.AndroidJUnit4; import android.support.test.uiautomator.By; import android.support.test.uiautomator.BySelector; @@ -56,6 +57,7 @@ import org.junit.runner.RunWith; import java.util.List; +@Suppress @RunWith(AndroidJUnit4.class) @LargeTest public class ExternalSourcesSettingsTest { From 8f6885682359a430131d4ff61b4152fbda22ec73 Mon Sep 17 00:00:00 2001 From: Tobias Thierer Date: Mon, 11 Dec 2017 16:51:07 +0000 Subject: [PATCH 05/10] Fix VisibilityPreferenceControllerTest. The test was expecting an ArgumentCaptor for RestrictedDropDownPreference (extends ListPreference).setEntryValues(CharSequence[]) to be passed an array of Strings, when actually it should have expected an array of CharSequences. This CL fixes the test to use CharSequence. Since CharSequence.equals() is not guaranteed to be in terms of value equality of the characters, a private static helper method: List toStringList(CharSequence[] charSequences) { ... } is used. Bug: 70504129 Test: EXPERIMENTAL_USE_OPENJDK9=1.8 make -j30 showcommands dist \ RunSettingsRoboTests RunSettingsRoboTests-jacoco \ RunSettingsLibRoboTests RunSettingsLibRoboTests-jacoco \ RunSettingsGoogleRoboTests RunSettingsGoogleRoboTests-jacoco \ RunSuwRoboTests RunSuwRoboTests-jacoco \ RunTurboRoboTests \ RunStorageManagerRoboTests \ RunTvSettingsRoboTests RunTvSettingsRoboTests-jacoco Change-Id: I347b03e6cb01715cd1c7f50b5f36567e5f375ad7 --- .../VisibilityPreferenceControllerTest.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/tests/robotests/src/com/android/settings/notification/VisibilityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/VisibilityPreferenceControllerTest.java index cdd1e9e16a5..d0d8a25de9f 100644 --- a/tests/robotests/src/com/android/settings/notification/VisibilityPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/VisibilityPreferenceControllerTest.java @@ -205,9 +205,10 @@ public class VisibilityPreferenceControllerTest { RestrictedDropDownPreference pref = mock(RestrictedDropDownPreference.class); mController.updateState(pref); - ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(String[].class); + ArgumentCaptor argumentCaptor = + ArgumentCaptor.forClass(CharSequence[].class); verify(pref, times(1)).setEntryValues(argumentCaptor.capture()); - assertFalse(Arrays.asList(argumentCaptor.getValue()) + assertFalse(toStringList(argumentCaptor.getValue()) .contains(VISIBILITY_NO_OVERRIDE)); } @@ -223,9 +224,10 @@ public class VisibilityPreferenceControllerTest { RestrictedDropDownPreference pref = mock(RestrictedDropDownPreference.class); mController.updateState(pref); - ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(String[].class); + ArgumentCaptor argumentCaptor = + ArgumentCaptor.forClass(CharSequence[].class); verify(pref, times(1)).setEntryValues(argumentCaptor.capture()); - assertFalse(Arrays.asList(argumentCaptor.getValue()) + assertFalse(toStringList(argumentCaptor.getValue()) .contains(VISIBILITY_NO_OVERRIDE)); } @@ -238,15 +240,24 @@ public class VisibilityPreferenceControllerTest { RestrictedDropDownPreference pref = mock(RestrictedDropDownPreference.class); mController.updateState(pref); - ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(String[].class); + ArgumentCaptor argumentCaptor = + ArgumentCaptor.forClass(CharSequence[].class); verify(pref, times(1)).setEntryValues(argumentCaptor.capture()); - List values = Arrays.asList(argumentCaptor.getValue()); + List values = toStringList(argumentCaptor.getValue()); assertEquals(3, values.size()); assertTrue(values.contains(String.valueOf(VISIBILITY_NO_OVERRIDE))); assertTrue(values.contains(String.valueOf(Notification.VISIBILITY_PRIVATE))); assertTrue(values.contains(String.valueOf(Notification.VISIBILITY_SECRET))); } + private static List toStringList(CharSequence[] charSequences) { + List result = new ArrayList<>(); + for (CharSequence charSequence : charSequences) { + result.add(charSequence.toString()); + } + return result; + } + @Test public void testUpdateState_noChannelOverride() throws Exception { Settings.Secure.putInt(mContext.getContentResolver(), From 9d01fe6823c3172d852dc0138e403ea72b561c34 Mon Sep 17 00:00:00 2001 From: Tobias Thierer Date: Mon, 11 Dec 2017 17:36:39 +0000 Subject: [PATCH 06/10] Fix assertion in VisibilityPreferenceControllerTest. The test was asserting that VISIBILIY_NO_OVERRIDE (an int) is not contained in a List (*), which is (trivially) true but doesn't test what the test intends to test. (*) or a List, which is similarly wrong / meaningless, prior to the base CL http://ag/3345932 VisibilityPreferenceController uses Integer.toString() to construct corresponding String values, so the test should be checking for that String value. For consistency with testUpdateState_noGlobalRestriction() this CL uses the equivalent (and slightly shorter) String.valueOf(int) instead of Integer.toString(). Test: EXPERIMENTAL_USE_OPENJDK9=1.8 make RunSettingsRoboTests \ ROBOTEST_FILTER=VisibilityPreferenceControllerTest Change-Id: I48644729d3e0f29d7ffcc981aeef650f2b1426ef --- .../notification/VisibilityPreferenceControllerTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/robotests/src/com/android/settings/notification/VisibilityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/VisibilityPreferenceControllerTest.java index d0d8a25de9f..c18372c78bf 100644 --- a/tests/robotests/src/com/android/settings/notification/VisibilityPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/VisibilityPreferenceControllerTest.java @@ -209,7 +209,7 @@ public class VisibilityPreferenceControllerTest { ArgumentCaptor.forClass(CharSequence[].class); verify(pref, times(1)).setEntryValues(argumentCaptor.capture()); assertFalse(toStringList(argumentCaptor.getValue()) - .contains(VISIBILITY_NO_OVERRIDE)); + .contains(String.valueOf(VISIBILITY_NO_OVERRIDE))); } @Test @@ -228,7 +228,7 @@ public class VisibilityPreferenceControllerTest { ArgumentCaptor.forClass(CharSequence[].class); verify(pref, times(1)).setEntryValues(argumentCaptor.capture()); assertFalse(toStringList(argumentCaptor.getValue()) - .contains(VISIBILITY_NO_OVERRIDE)); + .contains(String.valueOf(VISIBILITY_NO_OVERRIDE))); } @Test From 7ef47a9c5d8e24d8595a0d7afcd75a42208e1aee Mon Sep 17 00:00:00 2001 From: jeffreyhuang Date: Wed, 29 Nov 2017 16:41:48 -0800 Subject: [PATCH 07/10] Delete about phone v1 code Bug: 36458278 Test: make RunSettingsRoboTests -j40 Change-Id: Ib8f420a86caa1da0165aa5c161eb584a009ed2b9 --- res/xml/device_info_settings.xml | 99 ---- .../android/settings/DeviceInfoSettings.java | 101 +--- src/com/android/settings/Settings.java | 3 - .../android/settings/core/FeatureFlags.java | 1 - .../core/gateway/SettingsGateway.java | 6 - .../BasebandVersionPreferenceController.java | 58 --- .../BatteryInfoPreferenceController.java | 110 ---- .../DeviceModelPreferenceController.java | 10 +- .../FirmwareVersionPreferenceController.java | 118 ----- .../HardwareInfoDialogFragment.java | 9 +- .../ImeiInfoPreferenceController.java | 42 -- .../settings/deviceinfo/ImeiInformation.java | 180 ------- .../SecurityPatchPreferenceController.java | 81 --- .../SerialNumberPreferenceController.java | 39 -- .../settings/deviceinfo/SimStatus.java | 487 ------------------ .../SimStatusPreferenceController.java | 42 -- .../android/settings/deviceinfo/Status.java | 99 ---- .../UptimePreferenceController.java | 40 -- .../grandfather_not_implementing_indexable | 2 - ...ther_not_in_search_index_provider_registry | 3 +- .../settings/DeviceInfoSettingsTest.java | 9 - ...sebandVersionPreferenceControllerTest.java | 86 ---- .../BatteryInfoPreferenceControllerTest.java | 110 ---- .../DeviceModelPreferenceControllerTest.java | 11 +- ...rmwareVersionPreferenceControllerTest.java | 74 --- 25 files changed, 34 insertions(+), 1786 deletions(-) delete mode 100644 res/xml/device_info_settings.xml delete mode 100644 src/com/android/settings/deviceinfo/BasebandVersionPreferenceController.java delete mode 100644 src/com/android/settings/deviceinfo/BatteryInfoPreferenceController.java delete mode 100644 src/com/android/settings/deviceinfo/FirmwareVersionPreferenceController.java delete mode 100644 src/com/android/settings/deviceinfo/ImeiInfoPreferenceController.java delete mode 100644 src/com/android/settings/deviceinfo/ImeiInformation.java delete mode 100644 src/com/android/settings/deviceinfo/SecurityPatchPreferenceController.java delete mode 100644 src/com/android/settings/deviceinfo/SerialNumberPreferenceController.java delete mode 100644 src/com/android/settings/deviceinfo/SimStatus.java delete mode 100644 src/com/android/settings/deviceinfo/SimStatusPreferenceController.java delete mode 100644 src/com/android/settings/deviceinfo/Status.java delete mode 100644 src/com/android/settings/deviceinfo/UptimePreferenceController.java delete mode 100644 tests/robotests/src/com/android/settings/deviceinfo/BasebandVersionPreferenceControllerTest.java delete mode 100644 tests/robotests/src/com/android/settings/deviceinfo/BatteryInfoPreferenceControllerTest.java delete mode 100644 tests/robotests/src/com/android/settings/deviceinfo/FirmwareVersionPreferenceControllerTest.java diff --git a/res/xml/device_info_settings.xml b/res/xml/device_info_settings.xml deleted file mode 100644 index af1fb70c814..00000000000 --- a/res/xml/device_info_settings.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java index 74ce5d054c9..7e32e5e06e5 100644 --- a/src/com/android/settings/DeviceInfoSettings.java +++ b/src/com/android/settings/DeviceInfoSettings.java @@ -16,36 +16,29 @@ package com.android.settings; -import static com.android.settings.core.FeatureFlags.DEVICE_INFO_V2; - import android.app.Activity; import android.app.Fragment; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.provider.SearchIndexableResource; -import android.telephony.TelephonyManager; -import android.util.FeatureFlagUtils; import android.support.annotation.VisibleForTesting; +import android.telephony.TelephonyManager; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.SummaryLoader; -import com.android.settings.deviceinfo.BasebandVersionPreferenceController; import com.android.settings.deviceinfo.BluetoothAddressPreferenceController; import com.android.settings.deviceinfo.BuildNumberPreferenceController; import com.android.settings.deviceinfo.DeviceModelPreferenceController; import com.android.settings.deviceinfo.FccEquipmentIdPreferenceController; import com.android.settings.deviceinfo.FeedbackPreferenceController; -import com.android.settings.deviceinfo.FirmwareVersionPreferenceController; import com.android.settings.deviceinfo.ImsStatusPreferenceController; import com.android.settings.deviceinfo.IpAddressPreferenceController; -import com.android.settings.deviceinfo.KernelVersionPreferenceController; import com.android.settings.deviceinfo.ManualPreferenceController; import com.android.settings.deviceinfo.PhoneNumberPreferenceController; import com.android.settings.deviceinfo.RegulatoryInfoPreferenceController; import com.android.settings.deviceinfo.SafetyInfoPreferenceController; -import com.android.settings.deviceinfo.SecurityPatchPreferenceController; import com.android.settings.deviceinfo.WifiMacAddressPreferenceController; import com.android.settings.deviceinfo.firmwareversion.FirmwareVersionPreferenceControllerV2; import com.android.settings.deviceinfo.imei.ImeiInfoPreferenceControllerV2; @@ -84,21 +77,19 @@ public class DeviceInfoSettings extends DashboardFragment implements Indexable { public void onCreate(Bundle icicle) { super.onCreate(icicle); final Bundle arguments = getArguments(); - if (FeatureFlagUtils.isEnabled(getContext(), DEVICE_INFO_V2)) { - // Do not override initial expand children count if we come from - // search (EXTRA_FRAGMENT_ARG_KEY is set) - we need to display every if entry point - // is search. - if (arguments == null - || !arguments.containsKey(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY)) { + // Do not override initial expand children count if we come from + // search (EXTRA_FRAGMENT_ARG_KEY is set) - we need to display every if entry point + // is search. + if (arguments == null + || !arguments.containsKey(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY)) { - // Increase the number of children when the device contains more than 1 sim. - final TelephonyManager telephonyManager = (TelephonyManager) getSystemService( - Context.TELEPHONY_SERVICE); - final int numberOfChildren = Math.max(SIM_PREFERENCES_COUNT, - SIM_PREFERENCES_COUNT * telephonyManager.getPhoneCount()) - + NON_SIM_PREFERENCES_COUNT; - getPreferenceScreen().setInitialExpandedChildrenCount(numberOfChildren); - } + // Increase the number of children when the device contains more than 1 sim. + final TelephonyManager telephonyManager = (TelephonyManager) getSystemService( + Context.TELEPHONY_SERVICE); + final int numberOfChildren = Math.max(SIM_PREFERENCES_COUNT, + SIM_PREFERENCES_COUNT * telephonyManager.getPhoneCount()) + + NON_SIM_PREFERENCES_COUNT; + getPreferenceScreen().setInitialExpandedChildrenCount(numberOfChildren); } } @@ -119,8 +110,7 @@ public class DeviceInfoSettings extends DashboardFragment implements Indexable { @Override protected int getPreferenceScreenResId() { - return FeatureFlagUtils.isEnabled(getContext(), DEVICE_INFO_V2) - ? R.xml.device_info_settings_v2 : R.xml.device_info_settings; + return R.xml.device_info_settings_v2; } @Override @@ -156,57 +146,23 @@ public class DeviceInfoSettings extends DashboardFragment implements Indexable { private static List buildPreferenceControllers(Context context, Activity activity, Fragment fragment, Lifecycle lifecycle) { - if (FeatureFlagUtils.isEnabled(context, DEVICE_INFO_V2)) { - final List controllers = new ArrayList<>(); - // Device name - - controllers.add(new PhoneNumberPreferenceController(context)); - - controllers.add(new SimStatusPreferenceControllerV2(context, fragment)); - - controllers.add(new DeviceModelPreferenceController(context, fragment)); - - controllers.add(new ImeiInfoPreferenceControllerV2(context, fragment)); - - controllers.add(new FirmwareVersionPreferenceControllerV2(context, fragment)); - - controllers.add(new ImsStatusPreferenceController(context, lifecycle)); - - controllers.add(new IpAddressPreferenceController(context, lifecycle)); - - controllers.add(new WifiMacAddressPreferenceController(context, lifecycle)); - - controllers.add(new BluetoothAddressPreferenceController(context, lifecycle)); - - controllers.add(new RegulatoryInfoPreferenceController(context)); - - controllers.add(new SafetyInfoPreferenceController(context)); - - controllers.add(new ManualPreferenceController(context)); - - controllers.add(new FeedbackPreferenceController(fragment, context)); - - controllers.add(new FccEquipmentIdPreferenceController(context)); - - controllers.add( - new BuildNumberPreferenceController(context, activity, fragment, lifecycle)); - - return controllers; - } - final List controllers = new ArrayList<>(); - controllers.add( - new BuildNumberPreferenceController(context, activity, fragment, lifecycle)); + controllers.add(new PhoneNumberPreferenceController(context)); + controllers.add(new SimStatusPreferenceControllerV2(context, fragment)); + controllers.add(new DeviceModelPreferenceController(context, fragment)); + controllers.add(new ImeiInfoPreferenceControllerV2(context, fragment)); + controllers.add(new FirmwareVersionPreferenceControllerV2(context, fragment)); + controllers.add(new ImsStatusPreferenceController(context, lifecycle)); + controllers.add(new IpAddressPreferenceController(context, lifecycle)); + controllers.add(new WifiMacAddressPreferenceController(context, lifecycle)); + controllers.add(new BluetoothAddressPreferenceController(context, lifecycle)); + controllers.add(new RegulatoryInfoPreferenceController(context)); + controllers.add(new SafetyInfoPreferenceController(context)); controllers.add(new ManualPreferenceController(context)); controllers.add(new FeedbackPreferenceController(fragment, context)); - controllers.add(new KernelVersionPreferenceController(context)); - controllers.add(new BasebandVersionPreferenceController(context)); - controllers.add(new FirmwareVersionPreferenceController(context, lifecycle)); - controllers.add(new RegulatoryInfoPreferenceController(context)); - controllers.add(new DeviceModelPreferenceController(context, fragment)); - controllers.add(new SecurityPatchPreferenceController(context)); controllers.add(new FccEquipmentIdPreferenceController(context)); - controllers.add(new SafetyInfoPreferenceController(context)); + controllers.add( + new BuildNumberPreferenceController(context, activity, fragment, lifecycle)); return controllers; } @@ -220,8 +176,7 @@ public class DeviceInfoSettings extends DashboardFragment implements Indexable { public List getXmlResourcesToIndex( Context context, boolean enabled) { final SearchIndexableResource sir = new SearchIndexableResource(context); - sir.xmlResId = FeatureFlagUtils.isEnabled(context, DEVICE_INFO_V2) - ? R.xml.device_info_settings_v2 : R.xml.device_info_settings; + sir.xmlResId = R.xml.device_info_settings_v2; return Arrays.asList(sir); } diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index ff0f59f47b1..93149528380 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -148,9 +148,6 @@ public class Settings extends SettingsActivity { public static class ApnEditorActivity extends SettingsActivity { /* empty */ } public static class ChooseAccountActivity extends SettingsActivity { /* empty */ } public static class IccLockSettingsActivity extends SettingsActivity { /* empty */ } - public static class ImeiInformationActivity extends SettingsActivity { /* empty */ } - public static class SimStatusActivity extends SettingsActivity { /* empty */ } - public static class StatusActivity extends SettingsActivity { /* empty */ } public static class TestingSettingsActivity extends SettingsActivity { /* empty */ } public static class WifiAPITestActivity extends SettingsActivity { /* empty */ } public static class WifiInfoActivity extends SettingsActivity { /* empty */ } diff --git a/src/com/android/settings/core/FeatureFlags.java b/src/com/android/settings/core/FeatureFlags.java index 197876fcb17..7b39bdbb9c7 100644 --- a/src/com/android/settings/core/FeatureFlags.java +++ b/src/com/android/settings/core/FeatureFlags.java @@ -20,7 +20,6 @@ package com.android.settings.core; * This class keeps track of all feature flags in Settings. */ public class FeatureFlags { - public static final String DEVICE_INFO_V2 = "device_info_v2"; public static final String SEARCH_V2 = "settings_search_v2"; public static final String SUGGESTIONS_V2 = "new_settings_suggestion"; public static final String APP_INFO_V2 = "settings_app_info_v2"; diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java index ecef57e70c3..acb20d55c4f 100644 --- a/src/com/android/settings/core/gateway/SettingsGateway.java +++ b/src/com/android/settings/core/gateway/SettingsGateway.java @@ -65,12 +65,9 @@ import com.android.settings.datausage.DataUsageList; import com.android.settings.datausage.DataUsageSummary; import com.android.settings.deletionhelper.AutomaticStorageManagerSettings; import com.android.settings.development.DevelopmentSettingsDashboardFragment; -import com.android.settings.deviceinfo.ImeiInformation; import com.android.settings.deviceinfo.PrivateVolumeForget; import com.android.settings.deviceinfo.PrivateVolumeSettings; import com.android.settings.deviceinfo.PublicVolumeSettings; -import com.android.settings.deviceinfo.SimStatus; -import com.android.settings.deviceinfo.Status; import com.android.settings.deviceinfo.StorageDashboardFragment; import com.android.settings.deviceinfo.StorageSettings; import com.android.settings.display.NightDisplaySettings; @@ -235,9 +232,6 @@ public class SettingsGateway { ManagedProfileSettings.class.getName(), ChooseAccountActivity.class.getName(), IccLockSettings.class.getName(), - ImeiInformation.class.getName(), - SimStatus.class.getName(), - Status.class.getName(), TestingSettings.class.getName(), WifiAPITest.class.getName(), WifiInfo.class.getName(), diff --git a/src/com/android/settings/deviceinfo/BasebandVersionPreferenceController.java b/src/com/android/settings/deviceinfo/BasebandVersionPreferenceController.java deleted file mode 100644 index 06ed87228e9..00000000000 --- a/src/com/android/settings/deviceinfo/BasebandVersionPreferenceController.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2017 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.deviceinfo; - -import android.content.Context; -import android.os.SystemProperties; -import android.support.v7.preference.Preference; - -import com.android.settings.R; -import com.android.settings.core.PreferenceControllerMixin; -import com.android.settings.deviceinfo.firmwareversion.BasebandVersionDialogController; -import com.android.settingslib.Utils; -import com.android.settingslib.core.AbstractPreferenceController; - -/** - * deprecated in favor of {@link BasebandVersionDialogController} - */ -@Deprecated -public class BasebandVersionPreferenceController extends AbstractPreferenceController implements - PreferenceControllerMixin { - - private static final String BASEBAND_PROPERTY = "gsm.version.baseband"; - private static final String KEY_BASEBAND_VERSION = "baseband_version"; - - public BasebandVersionPreferenceController(Context context) { - super(context); - } - - @Override - public boolean isAvailable() { - return !Utils.isWifiOnly(mContext); - } - - @Override - public String getPreferenceKey() { - return KEY_BASEBAND_VERSION; - } - - @Override - public void updateState(Preference preference) { - super.updateState(preference); - preference.setSummary(SystemProperties.get(BASEBAND_PROPERTY, - mContext.getResources().getString(R.string.device_info_default))); - } -} diff --git a/src/com/android/settings/deviceinfo/BatteryInfoPreferenceController.java b/src/com/android/settings/deviceinfo/BatteryInfoPreferenceController.java deleted file mode 100644 index b5c12f71af1..00000000000 --- a/src/com/android/settings/deviceinfo/BatteryInfoPreferenceController.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (C) 2017 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.deviceinfo; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.support.annotation.VisibleForTesting; -import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceScreen; - -import com.android.settings.Utils; -import com.android.settings.core.PreferenceControllerMixin; -import com.android.settings.fuelgauge.PowerUsageSummary; -import com.android.settingslib.core.AbstractPreferenceController; -import com.android.settingslib.core.lifecycle.Lifecycle; -import com.android.settingslib.core.lifecycle.LifecycleObserver; -import com.android.settingslib.core.lifecycle.events.OnStart; -import com.android.settingslib.core.lifecycle.events.OnStop; - -/** - * Deprecated in About Phone V2 - * Information in this preference is available in {@link PowerUsageSummary} - */ -@Deprecated -public class BatteryInfoPreferenceController extends AbstractPreferenceController - implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop { - - @VisibleForTesting - static final IntentFilter BATTERY_INFO_RECEIVER_INTENT_FILTER = - new IntentFilter(Intent.ACTION_BATTERY_CHANGED); - @VisibleForTesting - static final String KEY_BATTERY_STATUS = "battery_status"; - @VisibleForTesting - static final String KEY_BATTERY_LEVEL = "battery_level"; - - @VisibleForTesting - BroadcastReceiver mBatteryInfoReceiver; - private Preference mBatteryStatus; - private Preference mBatteryLevel; - - - public BatteryInfoPreferenceController(Context context, Lifecycle lifecycle) { - super(context); - mBatteryInfoReceiver = new BatteryInfoReceiver(context); - if (lifecycle != null) { - lifecycle.addObserver(this); - } - } - - @Override - public boolean isAvailable() { - return true; - } - - @Override - public String getPreferenceKey() { - return null; - } - - @Override - public void displayPreference(PreferenceScreen screen) { - super.displayPreference(screen); - mBatteryLevel = screen.findPreference(KEY_BATTERY_LEVEL); - mBatteryStatus = screen.findPreference(KEY_BATTERY_STATUS); - } - - @Override - public void onStart() { - mContext.registerReceiver(mBatteryInfoReceiver, BATTERY_INFO_RECEIVER_INTENT_FILTER); - } - - @Override - public void onStop() { - mContext.unregisterReceiver(mBatteryInfoReceiver); - } - - private class BatteryInfoReceiver extends BroadcastReceiver { - - private final Context mContext; - - public BatteryInfoReceiver(Context context) { - mContext = context; - } - - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (Intent.ACTION_BATTERY_CHANGED.equals(action)) { - mBatteryLevel.setSummary(Utils.getBatteryPercentage(intent)); - mBatteryStatus.setSummary(Utils.getBatteryStatus(mContext.getResources(), intent)); - } - } - } -} diff --git a/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java b/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java index 7934ad7ced2..ee069da23a0 100644 --- a/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java +++ b/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java @@ -21,10 +21,8 @@ import android.os.Build; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; -import android.util.FeatureFlagUtils; import com.android.settings.R; -import com.android.settings.core.FeatureFlags; import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.DeviceInfoUtils; import com.android.settingslib.core.AbstractPreferenceController; @@ -51,12 +49,8 @@ public class DeviceModelPreferenceController extends AbstractPreferenceControlle super.displayPreference(screen); final Preference pref = screen.findPreference(KEY_DEVICE_MODEL); if (pref != null) { - if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.DEVICE_INFO_V2)) { - pref.setSummary(mContext.getResources().getString(R.string.model_summary, - getDeviceModel())); - } else { - pref.setSummary(getDeviceModel()); - } + pref.setSummary(mContext.getResources().getString(R.string.model_summary, + getDeviceModel())); } } diff --git a/src/com/android/settings/deviceinfo/FirmwareVersionPreferenceController.java b/src/com/android/settings/deviceinfo/FirmwareVersionPreferenceController.java deleted file mode 100644 index 8c9a2f1a4ee..00000000000 --- a/src/com/android/settings/deviceinfo/FirmwareVersionPreferenceController.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (C) 2017 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.deviceinfo; - -import android.content.Context; -import android.content.Intent; -import android.os.Build; -import android.os.SystemClock; -import android.os.UserHandle; -import android.os.UserManager; -import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceScreen; -import android.text.TextUtils; -import android.util.Log; - -import com.android.settings.core.PreferenceControllerMixin; -import com.android.settings.deviceinfo.firmwareversion.FirmwareVersionPreferenceControllerV2; -import com.android.settingslib.RestrictedLockUtils; -import com.android.settingslib.core.AbstractPreferenceController; -import com.android.settingslib.core.lifecycle.Lifecycle; -import com.android.settingslib.core.lifecycle.LifecycleObserver; -import com.android.settingslib.core.lifecycle.events.OnResume; - -/** - * deprecated in favor of {@link FirmwareVersionPreferenceControllerV2} - */ -@Deprecated -public class FirmwareVersionPreferenceController extends AbstractPreferenceController implements - PreferenceControllerMixin, LifecycleObserver, OnResume { - - private static final String TAG = "FirmwareVersionPref"; - private static final String KEY_FIRMWARE_VERSION = "firmware_version"; - - private final UserManager mUserManager; - - private RestrictedLockUtils.EnforcedAdmin mFunDisallowedAdmin; - private boolean mFunDisallowedBySystem; - - private long[] mHits = new long[3]; - - public FirmwareVersionPreferenceController(Context context, Lifecycle lifecycle) { - super(context); - mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); - if (lifecycle != null) { - lifecycle.addObserver(this); - } - } - - @Override - public boolean isAvailable() { - return true; - } - - @Override - public void displayPreference(PreferenceScreen screen) { - super.displayPreference(screen); - final Preference pref = screen.findPreference(KEY_FIRMWARE_VERSION); - if (pref != null) { - pref.setSummary(Build.VERSION.RELEASE); - } - } - - @Override - public String getPreferenceKey() { - return KEY_FIRMWARE_VERSION; - } - - @Override - public void onResume() { - mFunDisallowedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced( - mContext, UserManager.DISALLOW_FUN, UserHandle.myUserId()); - mFunDisallowedBySystem = RestrictedLockUtils.hasBaseUserRestriction( - mContext, UserManager.DISALLOW_FUN, UserHandle.myUserId()); - } - - @Override - public boolean handlePreferenceTreeClick(Preference preference) { - if (!TextUtils.equals(preference.getKey(), KEY_FIRMWARE_VERSION)) { - return false; - } - System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1); - mHits[mHits.length - 1] = SystemClock.uptimeMillis(); - if (mHits[0] >= (SystemClock.uptimeMillis() - 500)) { - if (mUserManager.hasUserRestriction(UserManager.DISALLOW_FUN)) { - if (mFunDisallowedAdmin != null && !mFunDisallowedBySystem) { - RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mContext, - mFunDisallowedAdmin); - } - Log.d(TAG, "Sorry, no fun for you!"); - return false; - } - - final Intent intent = new Intent(Intent.ACTION_MAIN) - .setClassName( - "android", com.android.internal.app.PlatLogoActivity.class.getName()); - try { - mContext.startActivity(intent); - return true; - } catch (Exception e) { - Log.e(TAG, "Unable to start activity " + intent.toString()); - } - } - return false; - } -} diff --git a/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java b/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java index 26f1ac2b53e..6169b44fe5a 100644 --- a/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java +++ b/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java @@ -23,14 +23,12 @@ import android.os.Bundle; import android.os.SystemProperties; import android.support.annotation.VisibleForTesting; import android.text.TextUtils; -import android.util.FeatureFlagUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; -import com.android.settings.core.FeatureFlags; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; public class HardwareInfoDialogFragment extends InstrumentedDialogFragment { @@ -59,12 +57,7 @@ public class HardwareInfoDialogFragment extends InstrumentedDialogFragment { DeviceModelPreferenceController.getDeviceModel()); // Serial number - if (FeatureFlagUtils.isEnabled(getContext(), FeatureFlags.DEVICE_INFO_V2)) { - setText(content, R.id.serial_number_label, R.id.serial_number_value, getSerialNumber()); - } else { - content.findViewById(R.id.serial_number_label).setVisibility(View.GONE); - content.findViewById(R.id.serial_number_value).setVisibility(View.GONE); - } + setText(content, R.id.serial_number_label, R.id.serial_number_value, getSerialNumber()); // Hardware rev setText(content, R.id.hardware_rev_label, R.id.hardware_rev_value, diff --git a/src/com/android/settings/deviceinfo/ImeiInfoPreferenceController.java b/src/com/android/settings/deviceinfo/ImeiInfoPreferenceController.java deleted file mode 100644 index 456dbfcce15..00000000000 --- a/src/com/android/settings/deviceinfo/ImeiInfoPreferenceController.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2017 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.deviceinfo; - -import android.content.Context; - -import com.android.settings.core.PreferenceControllerMixin; -import com.android.settings.deviceinfo.imei.ImeiInfoPreferenceControllerV2; -import com.android.settingslib.deviceinfo.AbstractSimStatusImeiInfoPreferenceController; - -/** - * deprecated in favour of {@link ImeiInfoPreferenceControllerV2} - */ -@Deprecated -public class ImeiInfoPreferenceController extends AbstractSimStatusImeiInfoPreferenceController - implements PreferenceControllerMixin { - - private static final String KEY_IMEI_INFO = "imei_info"; - - public ImeiInfoPreferenceController(Context context) { - super(context); - } - - @Override - public String getPreferenceKey() { - return KEY_IMEI_INFO; - } -} diff --git a/src/com/android/settings/deviceinfo/ImeiInformation.java b/src/com/android/settings/deviceinfo/ImeiInformation.java deleted file mode 100644 index 9f38f1b01bd..00000000000 --- a/src/com/android/settings/deviceinfo/ImeiInformation.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright (C) 2014 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.deviceinfo; - -import android.content.Context; -import android.os.Bundle; -import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceScreen; -import android.telephony.SubscriptionManager; -import android.telephony.TelephonyManager; -import android.text.Spannable; -import android.text.SpannableStringBuilder; -import android.text.Spanned; -import android.text.TextUtils; - -import android.text.style.TtsSpan; -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.internal.telephony.Phone; -import com.android.internal.telephony.PhoneConstants; -import com.android.internal.telephony.PhoneFactory; -import com.android.settings.R; -import com.android.settings.SettingsPreferenceFragment; -import com.android.settings.deviceinfo.imei.ImeiInfoPreferenceControllerV2; - -/** - * deprecated in favor of {@link ImeiInfoPreferenceControllerV2} - */ -@Deprecated -public class ImeiInformation extends SettingsPreferenceFragment { - - private static final String KEY_PRL_VERSION = "prl_version"; - private static final String KEY_MIN_NUMBER = "min_number"; - private static final String KEY_MEID_NUMBER = "meid_number"; - private static final String KEY_ICC_ID = "icc_id"; - private static final String KEY_IMEI = "imei"; - private static final String KEY_IMEI_SV = "imei_sv"; - - private SubscriptionManager mSubscriptionManager; - private boolean isMultiSIM = false; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mSubscriptionManager = SubscriptionManager.from(getContext()); - final TelephonyManager telephonyManager = - (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); - initPreferenceScreen(telephonyManager.getSimCount()); - } - - // Since there are multiple phone for dsds, therefore need to show information for different - // phones. - private void initPreferenceScreen(int slotCount) { - isMultiSIM = (slotCount > 1); - for (int slotId = 0; slotId < slotCount; slotId ++) { - addPreferencesFromResource(R.xml.device_info_phone_status); - setPreferenceValue(slotId); - setNewKey(slotId); - } - } - - private void setPreferenceValue(int phoneId) { - final Phone phone = PhoneFactory.getPhone(phoneId); - - if (phone != null) { - if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) { - setSummaryText(KEY_MEID_NUMBER, phone.getMeid()); - setSummaryText(KEY_MIN_NUMBER, phone.getCdmaMin()); - - if (getResources().getBoolean(R.bool.config_msid_enable)) { - findPreference(KEY_MIN_NUMBER).setTitle(R.string.status_msid_number); - } - - setSummaryText(KEY_PRL_VERSION, phone.getCdmaPrlVersion()); - - if (phone.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE) { - // Show ICC ID and IMEI for LTE device - setSummaryText(KEY_ICC_ID, phone.getIccSerialNumber()); - setSummaryTextAsDigit(KEY_IMEI, phone.getImei()); - setSummaryTextAsDigit(KEY_IMEI_SV, phone.getDeviceSvn()); - } else { - // device is not GSM/UMTS, do not display GSM/UMTS features - // check Null in case no specified preference in overlay xml - removePreferenceFromScreen(KEY_IMEI_SV); - removePreferenceFromScreen(KEY_IMEI); - removePreferenceFromScreen(KEY_ICC_ID); - } - } else { - setSummaryTextAsDigit(KEY_IMEI, phone.getImei()); - setSummaryTextAsDigit(KEY_IMEI_SV, phone.getDeviceSvn()); - // device is not CDMA, do not display CDMA features - // check Null in case no specified preference in overlay xml - removePreferenceFromScreen(KEY_PRL_VERSION); - removePreferenceFromScreen(KEY_MEID_NUMBER); - removePreferenceFromScreen(KEY_MIN_NUMBER); - removePreferenceFromScreen(KEY_ICC_ID); - } - } - } - - // Modify the preference key with prefix "_", so new added information preference can be set - // related phone information. - private void setNewKey(int slotId) { - final PreferenceScreen prefScreen = getPreferenceScreen(); - final int count = prefScreen.getPreferenceCount(); - for (int i = 0; i < count; i++) { - Preference pref = prefScreen.getPreference(i); - String key = pref.getKey(); - if (!key.startsWith("_")){ - key = "_" + key + String.valueOf(slotId); - pref.setKey(key); - updateTitle(pref, slotId); - } - } - } - - private void updateTitle(Preference pref, int slotId) { - if (pref != null) { - String title = pref.getTitle().toString(); - if (isMultiSIM) { - // Slot starts from 1, slotId starts from 0 so plus 1 - title += " " + getResources().getString(R.string.slot_number, slotId + 1); - } - pref.setTitle(title); - } - } - - private void setSummaryText(String key, String text) { - setSummaryText(key, text, false /* forceDigit */); - } - - private void setSummaryTextAsDigit(String key, String text) { - setSummaryText(key, text, true /* forceDigit */); - } - - private void setSummaryText(String key, CharSequence text, boolean forceDigit) { - final Preference preference = findPreference(key); - - if (TextUtils.isEmpty(text)) { - text = getResources().getString(R.string.device_info_default); - } else if (forceDigit && TextUtils.isDigitsOnly(text)) { - final Spannable spannable = new SpannableStringBuilder(text); - final TtsSpan span = new TtsSpan.DigitsBuilder(text.toString()).build(); - spannable.setSpan(span, 0, spannable.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - text = spannable; - } - - if (preference != null) { - preference.setSummary(text); - } - } - - /** - * Removes the specified preference, if it exists. - * @param key the key for the Preference item - */ - private void removePreferenceFromScreen(String key) { - final Preference preference = findPreference(key); - if (preference != null) { - getPreferenceScreen().removePreference(preference); - } - } - - @Override - public int getMetricsCategory() { - return MetricsEvent.DEVICEINFO_IMEI_INFORMATION; - } -} diff --git a/src/com/android/settings/deviceinfo/SecurityPatchPreferenceController.java b/src/com/android/settings/deviceinfo/SecurityPatchPreferenceController.java deleted file mode 100644 index 9b0120e7e77..00000000000 --- a/src/com/android/settings/deviceinfo/SecurityPatchPreferenceController.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) 2017 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.deviceinfo; - -import android.content.Context; -import android.content.pm.PackageManager; -import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceScreen; -import android.text.TextUtils; -import android.util.Log; - -import com.android.settings.core.PreferenceControllerMixin; -import com.android.settings.deviceinfo.firmwareversion.SecurityPatchLevelDialogController; -import com.android.settingslib.DeviceInfoUtils; -import com.android.settingslib.core.AbstractPreferenceController; - -/** - * deprecated in favor of {@link SecurityPatchLevelDialogController} - */ -@Deprecated -public class SecurityPatchPreferenceController extends AbstractPreferenceController implements - PreferenceControllerMixin { - - private static final String KEY_SECURITY_PATCH = "security_patch"; - private static final String TAG = "SecurityPatchPref"; - - private final String mPatch; - private final PackageManager mPackageManager; - - public SecurityPatchPreferenceController(Context context) { - super(context); - mPackageManager = mContext.getPackageManager(); - mPatch = DeviceInfoUtils.getSecurityPatch(); - } - - @Override - public boolean isAvailable() { - return !TextUtils.isEmpty(mPatch); - } - - @Override - public String getPreferenceKey() { - return KEY_SECURITY_PATCH; - } - - @Override - public void displayPreference(PreferenceScreen screen) { - super.displayPreference(screen); - final Preference pref = screen.findPreference(KEY_SECURITY_PATCH); - if (pref != null) { - pref.setSummary(mPatch); - } - } - - @Override - public boolean handlePreferenceTreeClick(Preference preference) { - if (!TextUtils.equals(preference.getKey(), KEY_SECURITY_PATCH)) { - return false; - } - if (mPackageManager.queryIntentActivities(preference.getIntent(), 0).isEmpty()) { - // Don't send out the intent to stop crash - Log.w(TAG, "Stop click action on " + KEY_SECURITY_PATCH + ": " - + "queryIntentActivities() returns empty"); - return true; - } - return false; - } -} diff --git a/src/com/android/settings/deviceinfo/SerialNumberPreferenceController.java b/src/com/android/settings/deviceinfo/SerialNumberPreferenceController.java deleted file mode 100644 index e466bbfb057..00000000000 --- a/src/com/android/settings/deviceinfo/SerialNumberPreferenceController.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2016 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.deviceinfo; - -import android.content.Context; -import android.os.Build; - -import com.android.settings.core.PreferenceControllerMixin; -import com.android.settingslib.deviceinfo.AbstractSerialNumberPreferenceController; - -/** - * Preference controller for displaying device serial number. Wraps {@link Build#getSerial()}. - * - * deprecated because this preference is no longer used in About Phone V2 - */ -@Deprecated -public class SerialNumberPreferenceController extends - AbstractSerialNumberPreferenceController implements - PreferenceControllerMixin { - public SerialNumberPreferenceController(Context context) { - super(context); - } - - // This space intentionally left blank -} diff --git a/src/com/android/settings/deviceinfo/SimStatus.java b/src/com/android/settings/deviceinfo/SimStatus.java deleted file mode 100644 index dad44190a29..00000000000 --- a/src/com/android/settings/deviceinfo/SimStatus.java +++ /dev/null @@ -1,487 +0,0 @@ -/* - * Copyright (C) 2014 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.deviceinfo; - -import static android.content.Context.CARRIER_CONFIG_SERVICE; -import static android.content.Context.TELEPHONY_SERVICE; - -import android.Manifest; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.Resources; -import android.os.Bundle; -import android.os.PersistableBundle; -import android.os.UserHandle; -import android.os.UserManager; -import android.support.v7.preference.Preference; -import android.telephony.CarrierConfigManager; -import android.telephony.CellBroadcastMessage; -import android.telephony.PhoneStateListener; -import android.telephony.ServiceState; -import android.telephony.SignalStrength; -import android.telephony.SubscriptionInfo; -import android.telephony.SubscriptionManager; -import android.telephony.TelephonyManager; -import android.text.TextUtils; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ListView; -import android.widget.TabHost; -import android.widget.TabHost.OnTabChangeListener; -import android.widget.TabHost.TabContentFactory; -import android.widget.TabHost.TabSpec; -import android.widget.TabWidget; - -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.internal.telephony.Phone; -import com.android.internal.telephony.PhoneConstantConversions; -import com.android.internal.telephony.PhoneFactory; -import com.android.settings.R; -import com.android.settings.SettingsPreferenceFragment; -import com.android.settings.Utils; -import com.android.settingslib.DeviceInfoUtils; - -import java.util.List; - - -/** - * Display the following information - * # Phone Number - * # Network - * # Roaming - * # Device Id (IMEI in GSM and MEID in CDMA) - * # Network type - * # Operator info (area update info cell broadcast) - * # Signal Strength - * - * deprecated in favor of {@link com.android.settings.deviceinfo.simstatus.SimStatusDialogFragment} - */ -@Deprecated -public class SimStatus extends SettingsPreferenceFragment { - private static final String TAG = "SimStatus"; - - private static final String KEY_DATA_STATE = "data_state"; - private static final String KEY_SERVICE_STATE = "service_state"; - private static final String KEY_OPERATOR_NAME = "operator_name"; - private static final String KEY_ROAMING_STATE = "roaming_state"; - private static final String KEY_NETWORK_TYPE = "network_type"; - private static final String KEY_LATEST_AREA_INFO = "latest_area_info"; - private static final String KEY_PHONE_NUMBER = "number"; - private static final String KEY_SIGNAL_STRENGTH = "signal_strength"; - private static final String KEY_IMEI = "imei"; - private static final String KEY_IMEI_SV = "imei_sv"; - private static final String KEY_ICCID = "iccid"; - - static private final String CB_AREA_INFO_RECEIVED_ACTION = - "com.android.cellbroadcastreceiver.CB_AREA_INFO_RECEIVED"; - - static private final String GET_LATEST_CB_AREA_INFO_ACTION = - "com.android.cellbroadcastreceiver.GET_LATEST_CB_AREA_INFO"; - - static private final String CELL_BROADCAST_RECEIVER_APP = "com.android.cellbroadcastreceiver"; - - private TelephonyManager mTelephonyManager; - private CarrierConfigManager mCarrierConfigManager; - private Phone mPhone = null; - private Resources mRes; - private Preference mSignalStrength; - private SubscriptionInfo mSir; - private boolean mShowLatestAreaInfo; - private boolean mShowICCID; - - // Default summary for items - private String mDefaultText; - - private TabHost mTabHost; - private TabWidget mTabWidget; - private ListView mListView; - private List mSelectableSubInfos; - - private PhoneStateListener mPhoneStateListener; - - // Once the cell broadcast configuration is moved into telephony framework, - private final BroadcastReceiver mAreaInfoReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (CB_AREA_INFO_RECEIVED_ACTION.equals(action)) { - Bundle extras = intent.getExtras(); - if (extras == null) { - return; - } - CellBroadcastMessage cbMessage = (CellBroadcastMessage) extras.get("message"); - if (cbMessage != null && mSir.getSubscriptionId() == cbMessage.getSubId()) { - String latestAreaInfo = cbMessage.getMessageBody(); - updateAreaInfo(latestAreaInfo); - } - } - } - }; - - @Override - public void onCreate(Bundle icicle) { - super.onCreate(icicle); - mTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); - mCarrierConfigManager = (CarrierConfigManager) getSystemService(CARRIER_CONFIG_SERVICE); - - mSelectableSubInfos = SubscriptionManager.from(getContext()) - .getActiveSubscriptionInfoList(); - - addPreferencesFromResource(R.xml.device_info_sim_status); - - mRes = getResources(); - mDefaultText = mRes.getString(R.string.device_info_default); - // Note - missing in zaku build, be careful later... - mSignalStrength = findPreference(KEY_SIGNAL_STRENGTH); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - if (mSelectableSubInfos == null) { - mSir = null; - } else { - mSir = mSelectableSubInfos.size() > 0 ? mSelectableSubInfos.get(0) : null; - - if (mSelectableSubInfos.size() > 1) { - View view = inflater.inflate(R.layout.icc_lock_tabs, container, false); - final ViewGroup prefs_container = (ViewGroup) view.findViewById( - R.id.prefs_container); - Utils.prepareCustomPreferencesList(container, view, prefs_container, false); - View prefs = super.onCreateView(inflater, prefs_container, savedInstanceState); - prefs_container.addView(prefs); - - mTabHost = (TabHost) view.findViewById(android.R.id.tabhost); - mTabWidget = (TabWidget) view.findViewById(android.R.id.tabs); - mListView = (ListView) view.findViewById(android.R.id.list); - - mTabHost.setup(); - mTabHost.setOnTabChangedListener(mTabListener); - mTabHost.clearAllTabs(); - - for (int i = 0; i < mSelectableSubInfos.size(); i++) { - mTabHost.addTab(buildTabSpec(String.valueOf(i), - String.valueOf(mSelectableSubInfos.get(i).getDisplayName()))); - } - return view; - } - } - return super.onCreateView(inflater, container, savedInstanceState); - } - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - updatePhoneInfos(); - } - - @Override - public int getMetricsCategory() { - return MetricsEvent.DEVICEINFO_SIM_STATUS; - } - - @Override - public void onResume() { - super.onResume(); - if (mPhone != null) { - updatePreference(); - - updateSignalStrength(mPhone.getSignalStrength()); - updateServiceState(mPhone.getServiceState()); - updateDataState(); - mTelephonyManager.listen(mPhoneStateListener, - PhoneStateListener.LISTEN_DATA_CONNECTION_STATE - | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS - | PhoneStateListener.LISTEN_SERVICE_STATE); - if (mShowLatestAreaInfo) { - getContext().registerReceiver(mAreaInfoReceiver, - new IntentFilter(CB_AREA_INFO_RECEIVED_ACTION), - Manifest.permission.RECEIVE_EMERGENCY_BROADCAST, null); - // Ask CellBroadcastReceiver to broadcast the latest area info received - Intent getLatestIntent = new Intent(GET_LATEST_CB_AREA_INFO_ACTION); - getLatestIntent.setPackage(CELL_BROADCAST_RECEIVER_APP); - getContext().sendBroadcastAsUser(getLatestIntent, UserHandle.ALL, - Manifest.permission.RECEIVE_EMERGENCY_BROADCAST); - } - } - } - - @Override - public void onPause() { - super.onPause(); - - if (mPhone != null) { - mTelephonyManager.listen(mPhoneStateListener, - PhoneStateListener.LISTEN_NONE); - } - if (mShowLatestAreaInfo) { - getContext().unregisterReceiver(mAreaInfoReceiver); - } - } - - /** - * Removes the specified preference, if it exists. - * @param key the key for the Preference item - */ - private void removePreferenceFromScreen(String key) { - Preference pref = findPreference(key); - if (pref != null) { - getPreferenceScreen().removePreference(pref); - } - } - - private void setSummaryText(String key, String text) { - if (TextUtils.isEmpty(text)) { - text = mDefaultText; - } - // some preferences may be missing - final Preference preference = findPreference(key); - if (preference != null) { - preference.setSummary(text); - } - } - - private void updateNetworkType() { - // Whether EDGE, UMTS, etc... - String networktype = null; - final int subId = mSir.getSubscriptionId(); - final int actualDataNetworkType = mTelephonyManager.getDataNetworkType( - mSir.getSubscriptionId()); - final int actualVoiceNetworkType = mTelephonyManager.getVoiceNetworkType( - mSir.getSubscriptionId()); - if (TelephonyManager.NETWORK_TYPE_UNKNOWN != actualDataNetworkType) { - networktype = mTelephonyManager.getNetworkTypeName(actualDataNetworkType); - } else if (TelephonyManager.NETWORK_TYPE_UNKNOWN != actualVoiceNetworkType) { - networktype = mTelephonyManager.getNetworkTypeName(actualVoiceNetworkType); - } - - boolean show4GForLTE = false; - try { - Context con = getActivity().createPackageContext("com.android.systemui", 0); - int id = con.getResources().getIdentifier("config_show4GForLTE", - "bool", "com.android.systemui"); - show4GForLTE = con.getResources().getBoolean(id); - } catch (NameNotFoundException e) { - Log.e(TAG, "NameNotFoundException for show4GFotLTE"); - } - - if (networktype != null && networktype.equals("LTE") && show4GForLTE) { - networktype = "4G"; - } - setSummaryText(KEY_NETWORK_TYPE, networktype); - } - - private void updateDataState() { - final int state = - PhoneConstantConversions.convertDataState(mPhone.getDataConnectionState()); - - String display = mRes.getString(R.string.radioInfo_unknown); - - switch (state) { - case TelephonyManager.DATA_CONNECTED: - display = mRes.getString(R.string.radioInfo_data_connected); - break; - case TelephonyManager.DATA_SUSPENDED: - display = mRes.getString(R.string.radioInfo_data_suspended); - break; - case TelephonyManager.DATA_CONNECTING: - display = mRes.getString(R.string.radioInfo_data_connecting); - break; - case TelephonyManager.DATA_DISCONNECTED: - display = mRes.getString(R.string.radioInfo_data_disconnected); - break; - } - - setSummaryText(KEY_DATA_STATE, display); - } - - private void updateServiceState(ServiceState serviceState) { - final int state = serviceState.getState(); - String display = mRes.getString(R.string.radioInfo_unknown); - - switch (state) { - case ServiceState.STATE_IN_SERVICE: - display = mRes.getString(R.string.radioInfo_service_in); - break; - case ServiceState.STATE_OUT_OF_SERVICE: - // Set signal strength to 0 when service state is STATE_OUT_OF_SERVICE - mSignalStrength.setSummary("0"); - case ServiceState.STATE_EMERGENCY_ONLY: - // Set summary string of service state to radioInfo_service_out when - // service state is both STATE_OUT_OF_SERVICE & STATE_EMERGENCY_ONLY - display = mRes.getString(R.string.radioInfo_service_out); - break; - case ServiceState.STATE_POWER_OFF: - display = mRes.getString(R.string.radioInfo_service_off); - // Also set signal strength to 0 - mSignalStrength.setSummary("0"); - break; - } - - setSummaryText(KEY_SERVICE_STATE, display); - - if (serviceState.getRoaming()) { - setSummaryText(KEY_ROAMING_STATE, mRes.getString(R.string.radioInfo_roaming_in)); - } else { - setSummaryText(KEY_ROAMING_STATE, mRes.getString(R.string.radioInfo_roaming_not)); - } - setSummaryText(KEY_OPERATOR_NAME, serviceState.getOperatorAlphaLong()); - } - - private void updateAreaInfo(String areaInfo) { - if (areaInfo != null) { - setSummaryText(KEY_LATEST_AREA_INFO, areaInfo); - } - } - - void updateSignalStrength(SignalStrength signalStrength) { - if (mSignalStrength != null) { - final int state = mPhone.getServiceState().getState(); - - if ((ServiceState.STATE_OUT_OF_SERVICE == state) || - (ServiceState.STATE_POWER_OFF == state)) { - mSignalStrength.setSummary("0"); - return; - } - - int signalDbm = signalStrength.getDbm(); - int signalAsu = signalStrength.getAsuLevel(); - - if (-1 == signalDbm) { - signalDbm = 0; - } - - if (-1 == signalAsu) { - signalAsu = 0; - } - - mSignalStrength.setSummary(mRes.getString(R.string.sim_signal_strength, - signalDbm, signalAsu)); - } - } - - private void updatePreference() { - if (mPhone.getPhoneType() != TelephonyManager.PHONE_TYPE_CDMA) { - mShowLatestAreaInfo = Resources.getSystem().getBoolean( - com.android.internal.R.bool.config_showAreaUpdateInfoSettings); - } - PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId( - mSir.getSubscriptionId()); - mShowICCID = carrierConfig.getBoolean( - CarrierConfigManager.KEY_SHOW_ICCID_IN_SIM_STATUS_BOOL); - - - // If formattedNumber is null or empty, it'll display as "Unknown". - setSummaryText(KEY_PHONE_NUMBER, - DeviceInfoUtils.getFormattedPhoneNumber(getContext(), mSir)); - setSummaryText(KEY_IMEI, mPhone.getImei()); - setSummaryText(KEY_IMEI_SV, mPhone.getDeviceSvn()); - - if (!mShowICCID) { - removePreferenceFromScreen(KEY_ICCID); - } else { - // Get ICCID, which is SIM serial number - String iccid = mTelephonyManager.getSimSerialNumber(mSir.getSubscriptionId()); - setSummaryText(KEY_ICCID, iccid); - } - - if (!mShowLatestAreaInfo) { - removePreferenceFromScreen(KEY_LATEST_AREA_INFO); - } - - boolean hideSignalStrength = carrierConfig.getBoolean( - CarrierConfigManager.KEY_HIDE_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL); - if (hideSignalStrength) { - removePreferenceFromScreen(KEY_SIGNAL_STRENGTH); - } - } - - private void updatePhoneInfos() { - if (mSir != null) { - // TODO: http://b/23763013 - final Phone phone = PhoneFactory.getPhone(SubscriptionManager.getPhoneId( - mSir.getSubscriptionId())); - if (UserManager.get(getContext()).isAdminUser() - && SubscriptionManager.isValidSubscriptionId(mSir.getSubscriptionId())) { - if (phone == null) { - Log.e(TAG, "Unable to locate a phone object for the given Subscription ID."); - return; - } - - mPhone = phone; - // To avoid register multiple listeners when user changes the tab. - if (mPhoneStateListener != null && mTelephonyManager != null) { - mTelephonyManager.listen(mPhoneStateListener, - PhoneStateListener.LISTEN_NONE); - mPhoneStateListener = null; - } - mPhoneStateListener = new PhoneStateListener(mSir.getSubscriptionId()) { - @Override - public void onDataConnectionStateChanged(int state) { - updateDataState(); - updateNetworkType(); - } - - @Override - public void onSignalStrengthsChanged(SignalStrength signalStrength) { - updateSignalStrength(signalStrength); - } - - @Override - public void onServiceStateChanged(ServiceState serviceState) { - updateServiceState(serviceState); - } - }; - } - } - } - private OnTabChangeListener mTabListener = new OnTabChangeListener() { - @Override - public void onTabChanged(String tabId) { - final int slotId = Integer.parseInt(tabId); - mSir = mSelectableSubInfos.get(slotId); - - // The User has changed tab; update the SIM information. - updatePhoneInfos(); - mTelephonyManager.listen(mPhoneStateListener, - PhoneStateListener.LISTEN_DATA_CONNECTION_STATE - | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS - | PhoneStateListener.LISTEN_SERVICE_STATE); - updateDataState(); - updateNetworkType(); - updatePreference(); - } - }; - - private TabContentFactory mEmptyTabContent = new TabContentFactory() { - @Override - public View createTabContent(String tag) { - return new View(mTabHost.getContext()); - } - }; - - private TabSpec buildTabSpec(String tag, String title) { - return mTabHost.newTabSpec(tag).setIndicator(title).setContent( - mEmptyTabContent); - } -} diff --git a/src/com/android/settings/deviceinfo/SimStatusPreferenceController.java b/src/com/android/settings/deviceinfo/SimStatusPreferenceController.java deleted file mode 100644 index ca531ea50c6..00000000000 --- a/src/com/android/settings/deviceinfo/SimStatusPreferenceController.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2017 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.deviceinfo; - -import android.content.Context; - -import com.android.settings.core.PreferenceControllerMixin; -import com.android.settings.deviceinfo.simstatus.SimStatusPreferenceControllerV2; -import com.android.settingslib.deviceinfo.AbstractSimStatusImeiInfoPreferenceController; - -/** - * deprecated in favor of {@link SimStatusPreferenceControllerV2} - */ -@Deprecated -public class SimStatusPreferenceController extends AbstractSimStatusImeiInfoPreferenceController - implements PreferenceControllerMixin { - - private static final String KEY_SIM_STATUS = "sim_status"; - - public SimStatusPreferenceController(Context context) { - super(context); - } - - @Override - public String getPreferenceKey() { - return KEY_SIM_STATUS; - } -} diff --git a/src/com/android/settings/deviceinfo/Status.java b/src/com/android/settings/deviceinfo/Status.java deleted file mode 100644 index 15ad5cf05e0..00000000000 --- a/src/com/android/settings/deviceinfo/Status.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2008 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.deviceinfo; - -import android.content.Context; -import android.provider.SearchIndexableResource; - -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.settings.DeviceInfoSettings; -import com.android.settings.R; -import com.android.settings.dashboard.DashboardFragment; -import com.android.settings.search.BaseSearchIndexProvider; -import com.android.settingslib.core.AbstractPreferenceController; -import com.android.settingslib.core.lifecycle.Lifecycle; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * Fragment for showing device hardware info, such as MAC addresses and serial numbers - * Deprecated in About Phone V2 - * Information on this page is available in {@link DeviceInfoSettings} - */ -@Deprecated -public class Status extends DashboardFragment { - - private static final String TAG = "DeviceStatus"; - - @Override - public int getMetricsCategory() { - return MetricsEvent.DEVICEINFO_STATUS; - } - - @Override - protected String getLogTag() { - return TAG; - } - - @Override - protected int getPreferenceScreenResId() { - return R.xml.device_info_status; - } - - @Override - protected List getPreferenceControllers(Context context) { - return buildPreferenceControllers(context, getLifecycle()); - } - - private static List buildPreferenceControllers(Context context, - Lifecycle lifecycle) { - final List controllers = new ArrayList<>(); - controllers.add(new SerialNumberPreferenceController(context)); - controllers.add(new UptimePreferenceController(context, lifecycle)); - controllers.add(new BluetoothAddressPreferenceController(context, lifecycle)); - controllers.add(new IpAddressPreferenceController(context, lifecycle)); - controllers.add(new WifiMacAddressPreferenceController(context, lifecycle)); - controllers.add(new ImsStatusPreferenceController(context, lifecycle)); - controllers.add(new SimStatusPreferenceController(context)); - controllers.add(new ImeiInfoPreferenceController(context)); - controllers.add(new BatteryInfoPreferenceController(context, lifecycle)); - return controllers; - } - - /** - * For Search. - */ - public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = - new BaseSearchIndexProvider() { - - @Override - public List getXmlResourcesToIndex( - Context context, boolean enabled) { - final SearchIndexableResource sir = new SearchIndexableResource(context); - sir.xmlResId = R.xml.device_info_status; - return Arrays.asList(sir); - } - - @Override - public List getPreferenceControllers(Context - context) { - return buildPreferenceControllers(context, null /* lifecycle */); - } - }; -} diff --git a/src/com/android/settings/deviceinfo/UptimePreferenceController.java b/src/com/android/settings/deviceinfo/UptimePreferenceController.java deleted file mode 100644 index c25f984ff5e..00000000000 --- a/src/com/android/settings/deviceinfo/UptimePreferenceController.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2017 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.deviceinfo; - -import android.content.Context; - -import com.android.settings.core.PreferenceControllerMixin; -import com.android.settings.fuelgauge.PowerUsageSummary; -import com.android.settingslib.core.lifecycle.Lifecycle; -import com.android.settingslib.deviceinfo.AbstractUptimePreferenceController; - -/** - * Concrete subclass of uptime preference controller - * - * Deprecated in About Phone V2 - * Information in this preference is available in {@link PowerUsageSummary} - */ -@Deprecated -public class UptimePreferenceController extends AbstractUptimePreferenceController - implements PreferenceControllerMixin { - public UptimePreferenceController(Context context, Lifecycle lifecycle) { - super(context, lifecycle); - } - - // This space intentionally left blank -} diff --git a/tests/robotests/assets/grandfather_not_implementing_indexable b/tests/robotests/assets/grandfather_not_implementing_indexable index eee2add4b6b..a82c9efc996 100644 --- a/tests/robotests/assets/grandfather_not_implementing_indexable +++ b/tests/robotests/assets/grandfather_not_implementing_indexable @@ -1,12 +1,10 @@ com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment -com.android.settings.deviceinfo.SimStatus com.android.settings.deviceinfo.PrivateVolumeForget com.android.settings.inputmethod.SpellCheckersSettings com.android.settings.inputmethod.KeyboardLayoutPickerFragment com.android.settings.fuelgauge.InactiveApps com.android.settings.accessibility.CaptionPropertiesFragment com.android.settings.accessibility.AccessibilitySettingsForSetupWizard -com.android.settings.deviceinfo.ImeiInformation com.android.settings.datausage.DataUsageList com.android.settings.vpn2.AppManagementFragment com.android.settings.vpn2.VpnSettings diff --git a/tests/robotests/assets/grandfather_not_in_search_index_provider_registry b/tests/robotests/assets/grandfather_not_in_search_index_provider_registry index 9fd41f23ee8..666b224558a 100644 --- a/tests/robotests/assets/grandfather_not_in_search_index_provider_registry +++ b/tests/robotests/assets/grandfather_not_in_search_index_provider_registry @@ -1,3 +1,2 @@ com.android.settings.display.ScreenZoomPreferenceFragmentForSetupWizard -com.android.settings.search.indexing.FakeSettingsFragment -com.android.settings.deviceinfo.Status +com.android.settings.search.indexing.FakeSettingsFragment \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java b/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java index 486993d1b7b..09ff9db74fa 100644 --- a/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java +++ b/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java @@ -30,12 +30,9 @@ import android.app.Activity; import android.content.Context; import android.os.Build; import android.os.Bundle; -import android.os.SystemProperties; import android.support.v7.preference.PreferenceScreen; import android.telephony.TelephonyManager; -import android.util.FeatureFlagUtils; -import com.android.settings.core.FeatureFlags; import com.android.settings.dashboard.SummaryLoader; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; @@ -98,8 +95,6 @@ public class DeviceInfoSettingsTest { SettingsShadowSystemProperties.class }) public void getPrefXml_shouldReturnDeviceInfoXml() { - SystemProperties.set(FeatureFlagUtils.FFLAG_OVERRIDE_PREFIX + FeatureFlags.DEVICE_INFO_V2, - "true"); assertThat(mSettings.getPreferenceScreenResId()).isEqualTo(R.xml.device_info_settings_v2); } @@ -142,8 +137,6 @@ public class DeviceInfoSettingsTest { @Config(shadows = {SettingsShadowResources.SettingsShadowTheme.class, SettingsShadowSystemProperties.class}) public void onCreate_singleSim_shouldAddSingleSimCount() { - SystemProperties.set(FeatureFlagUtils.FFLAG_OVERRIDE_PREFIX + FeatureFlags.DEVICE_INFO_V2, - "true"); doReturn(1).when(mTelephonyManager).getPhoneCount(); mSettings.onCreate(null /* icicle */); @@ -156,8 +149,6 @@ public class DeviceInfoSettingsTest { @Config(shadows = {SettingsShadowResources.SettingsShadowTheme.class, SettingsShadowSystemProperties.class}) public void onCreate_dualeSim_shouldAddDualSimCount() { - SystemProperties.set(FeatureFlagUtils.FFLAG_OVERRIDE_PREFIX + FeatureFlags.DEVICE_INFO_V2, - "true"); doReturn(2).when(mTelephonyManager).getPhoneCount(); mSettings.onCreate(null /* icicle */); diff --git a/tests/robotests/src/com/android/settings/deviceinfo/BasebandVersionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/BasebandVersionPreferenceControllerTest.java deleted file mode 100644 index f71bae64152..00000000000 --- a/tests/robotests/src/com/android/settings/deviceinfo/BasebandVersionPreferenceControllerTest.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2017 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.deviceinfo; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Mockito.verify; -import static org.robolectric.shadow.api.Shadow.extract; - -import android.net.ConnectivityManager; -import android.support.v7.preference.Preference; - -import com.android.settings.TestConfig; -import com.android.settings.deviceinfo.firmwareversion.BasebandVersionDialogController; -import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.testutils.shadow.SettingsShadowSystemProperties; -import com.android.settings.testutils.shadow.ShadowConnectivityManager; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; - -/** - * Deprecated in favor of {@link BasebandVersionDialogController} - */ -@Deprecated -@RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, - shadows = ShadowConnectivityManager.class) -public class BasebandVersionPreferenceControllerTest { - - - @Mock - private Preference mPreference; - - private BasebandVersionPreferenceController mController; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - mController = new BasebandVersionPreferenceController(RuntimeEnvironment.application); - } - - @Test - public void isAvailable_wifiOnly_shouldReturnFalse() { - ShadowConnectivityManager connectivityManager = - extract(RuntimeEnvironment.application.getSystemService(ConnectivityManager.class)); - connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, false); - assertThat(mController.isAvailable()).isFalse(); - } - - @Test - public void isAvailable_hasMobile_shouldReturnTrue() { - ShadowConnectivityManager connectivityManager = - extract(RuntimeEnvironment.application.getSystemService(ConnectivityManager.class)); - connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, true); - assertThat(mController.isAvailable()).isTrue(); - } - - @Config(shadows = {SettingsShadowSystemProperties.class}) - @Test - public void updateState_shouldLoadFromSysProperty() { - SettingsShadowSystemProperties.set("gsm.version.baseband", "test"); - - mController.updateState(mPreference); - - verify(mPreference).setSummary("test"); - } -} diff --git a/tests/robotests/src/com/android/settings/deviceinfo/BatteryInfoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/BatteryInfoPreferenceControllerTest.java deleted file mode 100644 index 0ccc1391ec1..00000000000 --- a/tests/robotests/src/com/android/settings/deviceinfo/BatteryInfoPreferenceControllerTest.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (C) 2017 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.deviceinfo; - -import static android.arch.lifecycle.Lifecycle.Event.ON_START; -import static android.arch.lifecycle.Lifecycle.Event.ON_STOP; - -import static com.android.settings.deviceinfo.BatteryInfoPreferenceController - .BATTERY_INFO_RECEIVER_INTENT_FILTER; -import static com.android.settings.deviceinfo.BatteryInfoPreferenceController.KEY_BATTERY_LEVEL; -import static com.android.settings.deviceinfo.BatteryInfoPreferenceController.KEY_BATTERY_STATUS; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.content.Context; -import android.content.Intent; -import android.os.BatteryManager; -import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceScreen; - -import com.android.settings.R; -import com.android.settings.TestConfig; -import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settingslib.core.lifecycle.Lifecycle; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; - -@RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) -public class BatteryInfoPreferenceControllerTest { - - private Context mContext; - @Mock - private PreferenceScreen mScreen; - - private Preference mBatteryLevel; - private Preference mBatteryStatus; - private Lifecycle mLifecycle; - private BatteryInfoPreferenceController mController; - - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - mContext = RuntimeEnvironment.application; - mLifecycle = new Lifecycle(() -> mLifecycle); - mController = new BatteryInfoPreferenceController(mContext, mLifecycle); - mBatteryLevel = new Preference(mContext); - mBatteryStatus = new Preference(mContext); - when(mScreen.findPreference(KEY_BATTERY_STATUS)).thenReturn(mBatteryStatus); - when(mScreen.findPreference(KEY_BATTERY_LEVEL)).thenReturn(mBatteryLevel); - } - - @Test - public void isAlwaysAvailable() { - assertThat(mController.getPreferenceKey()).isNull(); - assertThat(mController.isAvailable()).isTrue(); - } - - @Test - public void runThroughLifecycle_shouldRegisterUnregisterBatteryInfoReceiver() { - final Context context = mock(Context.class); - mController = new BatteryInfoPreferenceController(context, mLifecycle); - mLifecycle.handleLifecycleEvent(ON_START); - mLifecycle.handleLifecycleEvent(ON_STOP); - - verify(context).registerReceiver(mController.mBatteryInfoReceiver, - BATTERY_INFO_RECEIVER_INTENT_FILTER); - verify(context).unregisterReceiver(mController.mBatteryInfoReceiver); - } - - @Test - public void onReceiveBatteryInfoBroadcast_shouldUpdatePreferences() { - mController.displayPreference(mScreen); - final Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED); - intent.putExtra(BatteryManager.EXTRA_LEVEL, 50); - intent.putExtra(BatteryManager.EXTRA_SCALE, 100); - intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING); - - mController.mBatteryInfoReceiver.onReceive(mContext, intent); - - assertThat(mBatteryLevel.getSummary()).isEqualTo("50%"); - assertThat(mBatteryStatus.getSummary()) - .isEqualTo(mContext.getText(R.string.battery_info_status_charging)); - } -} diff --git a/tests/robotests/src/com/android/settings/deviceinfo/DeviceModelPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/DeviceModelPreferenceControllerTest.java index 347ca3ac308..6a5c7fa25f6 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/DeviceModelPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/DeviceModelPreferenceControllerTest.java @@ -19,6 +19,7 @@ package com.android.settings.deviceinfo; import static com.android.settings.deviceinfo.DeviceModelPreferenceController.getDeviceModel; import static com.google.common.truth.Truth.assertThat; + import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.verify; @@ -26,16 +27,12 @@ import static org.mockito.Mockito.when; import android.app.Fragment; import android.content.Context; -import android.os.SystemProperties; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; -import android.util.FeatureFlagUtils; import com.android.settings.R; import com.android.settings.TestConfig; -import com.android.settings.core.FeatureFlags; import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.testutils.shadow.SettingsShadowSystemProperties; import org.junit.Before; import org.junit.Test; @@ -57,6 +54,7 @@ public class DeviceModelPreferenceControllerTest { @Mock private PreferenceScreen mPreferenceScreen; + private Context mContext; private DeviceModelPreferenceController mController; @@ -76,12 +74,7 @@ public class DeviceModelPreferenceControllerTest { } @Test - @Config(shadows = { - SettingsShadowSystemProperties.class - }) public void displayPref_shouldSetSummary() { - SystemProperties.set(FeatureFlagUtils.FFLAG_OVERRIDE_PREFIX + FeatureFlags.DEVICE_INFO_V2, - "true"); mController.displayPreference(mPreferenceScreen); verify(mPreference).setSummary(mContext.getResources().getString(R.string.model_summary, diff --git a/tests/robotests/src/com/android/settings/deviceinfo/FirmwareVersionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/FirmwareVersionPreferenceControllerTest.java deleted file mode 100644 index 09b2e7f5f83..00000000000 --- a/tests/robotests/src/com/android/settings/deviceinfo/FirmwareVersionPreferenceControllerTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2017 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.deviceinfo; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Mockito.when; - -import android.content.Context; -import android.os.UserManager; -import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceScreen; - -import com.android.settings.TestConfig; -import com.android.settings.deviceinfo.firmwareversion.FirmwareVersionDialogController; -import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settingslib.core.lifecycle.Lifecycle; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Answers; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; - -/** - * Deprecated in favor of {@link FirmwareVersionDialogController} - */ -@Deprecated -@RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) -public class FirmwareVersionPreferenceControllerTest { - - @Mock(answer = Answers.RETURNS_DEEP_STUBS) - private Context mContext; - @Mock - private Preference mPreference; - @Mock - private PreferenceScreen mPreferenceScreen; - @Mock - private UserManager mUserManager; - private FirmwareVersionPreferenceController mController; - private Lifecycle mLifecycle; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - mLifecycle = new Lifecycle(() -> mLifecycle); - when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); - when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE)).thenReturn(null); - mController = new FirmwareVersionPreferenceController(mContext, mLifecycle); - when(mPreferenceScreen.findPreference(mController.getPreferenceKey())) - .thenReturn(mPreference); - } - - @Test - public void isAlwaysAvailable() { - assertThat(mController.isAvailable()).isTrue(); - } -} From 0db26b3a872ca6b48be4d8c08ed45a21d60093e8 Mon Sep 17 00:00:00 2001 From: Phil Weaver Date: Fri, 8 Dec 2017 17:10:06 -0800 Subject: [PATCH 08/10] Add icons for color inversion and daltonizer For accessibilty settings, both on the main page and the shortcut picker. Also now observing settings that could be toggled by the shortcut, so changes can be reflected immediately in the settings ui. Bug: 34621067 Fixes: 70335904 Test: Observe icons in settings and shortcut picker. Toggling color inversion and color correction now changes the setting ui immediately. Change-Id: Id27b6471376059288ff971e5aea72d76078bef36 --- color-check-baseline.xml | 170 ++++++++++++++++-- res/drawable/ic_color_inversion.xml | 52 ++++++ res/drawable/ic_daltonizer.xml | 56 ++++++ res/xml/accessibility_settings.xml | 6 +- .../accessibility/AccessibilitySettings.java | 26 ++- .../SettingsContentObserver.java | 20 ++- .../ShortcutServicePickerFragment.java | 13 +- 7 files changed, 313 insertions(+), 30 deletions(-) create mode 100644 res/drawable/ic_color_inversion.xml create mode 100644 res/drawable/ic_daltonizer.xml diff --git a/color-check-baseline.xml b/color-check-baseline.xml index cbcdf48ddea..6fa20421e3d 100644 --- a/color-check-baseline.xml +++ b/color-check-baseline.xml @@ -1,6 +1,18 @@ + + + + @@ -1085,7 +1097,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1281,6 +1293,134 @@ column="17"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1933,7 +2073,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~"> @@ -1949,7 +2089,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~"> @@ -1965,7 +2105,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~"> @@ -1981,7 +2121,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~"> @@ -1997,7 +2137,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~"> @@ -2013,7 +2153,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~"> @@ -2029,7 +2169,7 @@ errorLine2=" ^"> @@ -2045,7 +2185,7 @@ errorLine2=" ^"> @@ -2061,7 +2201,7 @@ errorLine2=" ^"> @@ -2077,7 +2217,7 @@ errorLine2=" ^"> @@ -2093,7 +2233,7 @@ errorLine2=" ^"> @@ -2109,7 +2249,7 @@ errorLine2=" ^"> diff --git a/res/drawable/ic_color_inversion.xml b/res/drawable/ic_color_inversion.xml new file mode 100644 index 00000000000..aa59f5a0c4d --- /dev/null +++ b/res/drawable/ic_color_inversion.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/drawable/ic_daltonizer.xml b/res/drawable/ic_daltonizer.xml new file mode 100644 index 00000000000..04e397d52a4 --- /dev/null +++ b/res/drawable/ic_daltonizer.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml index 7728a078421..d7d2e02e4e1 100644 --- a/res/xml/accessibility_settings.xml +++ b/res/xml/accessibility_settings.xml @@ -118,12 +118,14 @@ + android:title="@string/accessibility_display_daltonizer_preference_title" + android:icon="@drawable/ic_daltonizer"/> + android:persistent="false" + android:icon="@drawable/ic_color_inversion"/> diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java index 0611b09302e..21614155029 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettings.java +++ b/src/com/android/settings/accessibility/AccessibilitySettings.java @@ -42,6 +42,7 @@ import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.accessibility.AccessibilityManager; +import com.android.internal.accessibility.AccessibilityShortcutController; import com.android.internal.content.PackageMonitor; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.view.RotationPolicy; @@ -57,6 +58,7 @@ import com.android.settingslib.RestrictedPreference; import com.android.settingslib.accessibility.AccessibilityUtils; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -172,13 +174,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements } }; - private final SettingsContentObserver mSettingsContentObserver = - new SettingsContentObserver(mHandler) { - @Override - public void onChange(boolean selfChange, Uri uri) { - updateServicePreferences(); - } - }; + private final SettingsContentObserver mSettingsContentObserver; private final RotationPolicyListener mRotationPolicyListener = new RotationPolicyListener() { @Override @@ -224,6 +220,22 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements .getBoolean(com.android.internal.R.bool.config_setColorTransformAccelerated); } + public AccessibilitySettings() { + // Observe changes to anything that the shortcut can toggle, so we can reflect updates + final Collection features = + AccessibilityShortcutController.getFrameworkShortcutFeaturesMap().values(); + final List shortcutFeatureKeys = new ArrayList<>(features.size()); + for (AccessibilityShortcutController.ToggleableFrameworkFeatureInfo feature : features) { + shortcutFeatureKeys.add(feature.getSettingKey()); + } + mSettingsContentObserver = new SettingsContentObserver(mHandler, shortcutFeatureKeys) { + @Override + public void onChange(boolean selfChange, Uri uri) { + updateAllPreferences(); + } + }; + } + @Override public int getMetricsCategory() { return MetricsEvent.ACCESSIBILITY; diff --git a/src/com/android/settings/accessibility/SettingsContentObserver.java b/src/com/android/settings/accessibility/SettingsContentObserver.java index c3baec50382..de67f6c4e3d 100644 --- a/src/com/android/settings/accessibility/SettingsContentObserver.java +++ b/src/com/android/settings/accessibility/SettingsContentObserver.java @@ -22,16 +22,28 @@ import android.net.Uri; import android.os.Handler; import android.provider.Settings; +import java.util.ArrayList; +import java.util.List; + abstract class SettingsContentObserver extends ContentObserver { + private final List mKeysToObserve = new ArrayList<>(2); + public SettingsContentObserver(Handler handler) { super(handler); + mKeysToObserve.add(Settings.Secure.ACCESSIBILITY_ENABLED); + mKeysToObserve.add(Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); + } + + public SettingsContentObserver(Handler handler, List keysToObserve) { + this(handler); + mKeysToObserve.addAll(keysToObserve); } public void register(ContentResolver contentResolver) { - contentResolver.registerContentObserver(Settings.Secure.getUriFor( - Settings.Secure.ACCESSIBILITY_ENABLED), false, this); - contentResolver.registerContentObserver(Settings.Secure.getUriFor( - Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES), false, this); + for (int i = 0; i < mKeysToObserve.size(); i++) { + contentResolver.registerContentObserver( + Settings.Secure.getUriFor(mKeysToObserve.get(i)), false, this); + } } public void unregister(ContentResolver contentResolver) { diff --git a/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java b/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java index e0c41befa45..52c1a0d95a7 100644 --- a/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java +++ b/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java @@ -16,6 +16,8 @@ package com.android.settings.accessibility; import static android.content.DialogInterface.BUTTON_POSITIVE; +import static com.android.internal.accessibility.AccessibilityShortcutController.COLOR_INVERSION_COMPONENT_NAME; +import static com.android.internal.accessibility.AccessibilityShortcutController.DALTONIZER_COMPONENT_NAME; import android.accessibilityservice.AccessibilityServiceInfo; import android.app.Activity; @@ -85,9 +87,16 @@ public class ShortcutServicePickerFragment extends RadioButtonPickerFragment { Map frameworkFeatureInfoMap = AccessibilityShortcutController.getFrameworkShortcutFeaturesMap(); for (ComponentName componentName : frameworkFeatureInfoMap.keySet()) { - // Lookup icon + final int iconId; + if (componentName.equals(COLOR_INVERSION_COMPONENT_NAME)) { + iconId = R.drawable.ic_color_inversion; + } else if (componentName.equals(DALTONIZER_COMPONENT_NAME)) { + iconId = R.drawable.ic_daltonizer; + } else { + iconId = R.drawable.empty_icon; + } candidates.add(new FrameworkCandidateInfo(frameworkFeatureInfoMap.get(componentName), - R.drawable.empty_icon, componentName.flattenToString())); + iconId, componentName.flattenToString())); } for (int i = 0; i < numInstalledServices; i++) { final AccessibilityServiceInfo installedServiceInfo = installedServices.get(i); From ebf884384073e96754d6bea5ee6e611f293a65f5 Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Mon, 11 Dec 2017 11:18:10 -0800 Subject: [PATCH 09/10] Update package name for PictureAndPictureSettings - the settings have been moved into the appinfo package, but the path has not been updated properly in the android manifest. Change-Id: I3a00a187bd2fdbeb926e2bb8cc1c4ab720ccd72a Fixes: 70491786 Test: manual --- AndroidManifest.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 8eaf761d478..6ccb8d1b08d 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2573,7 +2573,7 @@ + android:value="com.android.settings.applications.appinfo.PictureInPictureSettings" /> + android:value="com.android.settings.applications.appinfo.PictureInPictureDetails" /> + android:value="com.android.settings.applications.appinfo.DrawOverlayDetails" /> + android:value="com.android.settings.applications.appinfo.WriteSettingsDetails" /> + android:value="com.android.settings.applications.appinfo.ExternalSourcesDetails" /> Date: Mon, 11 Dec 2017 13:45:40 -0800 Subject: [PATCH 10/10] Update package name for PictureAndPictureSettings - also need to update the reference in the special app access xml page. Change-Id: I1199f70adf18d3f0e21a946848239526d9c8b3c8 Fixes: 70491786 Test: make SettingsUnitTests --- res/xml/special_access.xml | 2 +- .../SpecialAppAccessSettingsTest.java | 89 +++++++++++++++++++ 2 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 tests/unit/src/com/android/settings/applications/SpecialAppAccessSettingsTest.java diff --git a/res/xml/special_access.xml b/res/xml/special_access.xml index 6adfc933fb4..829bc53c6c1 100644 --- a/res/xml/special_access.xml +++ b/res/xml/special_access.xml @@ -68,7 +68,7 @@