From 2936551f70e0d04d0eea6a63b759e77d20dc47dc Mon Sep 17 00:00:00 2001 From: Jackal Guo Date: Thu, 14 Feb 2019 15:19:53 +0800 Subject: [PATCH 1/9] Provide a way to ToggleA11yServicePreferenceFragment via Intent Intent can only open the list of a11y services in Settings currently. PermissionController needs a way to open the screen with the a11y service toggle. Bug: 123693167 Test: manual Test: atest AccessibilityDetailsSettingsFragmentTest Change-Id: I32ed39330cf9e4c18a1747521fb65eb911d1c6e4 --- AndroidManifest.xml | 14 ++ src/com/android/settings/Settings.java | 1 + .../AccessibilityDetailsSettingsFragment.java | 182 ++++++++++++++++++ .../core/gateway/SettingsGateway.java | 2 + ...essibilityDetailsSettingsFragmentTest.java | 146 ++++++++++++++ 5 files changed, 345 insertions(+) create mode 100644 src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragment.java create mode 100644 tests/robotests/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragmentTest.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 6724ff5355d..ec0852c65e4 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1362,6 +1362,20 @@ android:value="true" /> + + + + + + + + + permittedServices = dpm.getPermittedAccessibilityServices( + UserHandle.myUserId()); + return (permittedServices == null || permittedServices.contains(packageName)); + } + + private AccessibilityServiceInfo getAccessibilityServiceInfo(ComponentName componentName) { + if (componentName == null) { + return null; + } + + final List serviceInfos = AccessibilityManager.getInstance( + getActivity()).getInstalledAccessibilityServiceList(); + final int serviceInfoCount = serviceInfos.size(); + for (int i = 0; i < serviceInfoCount; i++) { + AccessibilityServiceInfo serviceInfo = serviceInfos.get(i); + ResolveInfo resolveInfo = serviceInfo.getResolveInfo(); + if (componentName.getPackageName().equals(resolveInfo.serviceInfo.packageName) + && componentName.getClassName().equals(resolveInfo.serviceInfo.name)) { + return serviceInfo; + } + } + return null; + } + + private Bundle buildArguments(AccessibilityServiceInfo info) { + final ResolveInfo resolveInfo = info.getResolveInfo(); + final String title = resolveInfo.loadLabel(getActivity().getPackageManager()).toString(); + final ServiceInfo serviceInfo = resolveInfo.serviceInfo; + final String packageName = serviceInfo.packageName; + final ComponentName componentName = new ComponentName(packageName, serviceInfo.name); + + final List enabledServiceInfos = AccessibilityManager.getInstance( + getActivity()).getEnabledAccessibilityServiceList( + AccessibilityServiceInfo.FEEDBACK_ALL_MASK); + final Set enabledServices = + AccessibilityUtils.getEnabledServicesFromSettings(getActivity()); + final boolean serviceEnabled = enabledServices.contains(componentName); + String description = info.loadDescription(getActivity().getPackageManager()); + if (TextUtils.isEmpty(description)) { + description = getString(R.string.accessibility_service_default_description); + } + + if (serviceEnabled && AccessibilityUtils.hasServiceCrashed( + packageName, serviceInfo.name, enabledServiceInfos)) { + // Update the summaries for services that have crashed. + description = getString(R.string.accessibility_description_state_stopped); + } + + final Bundle extras = new Bundle(); + extras.putString(AccessibilitySettings.EXTRA_PREFERENCE_KEY, + componentName.flattenToString()); + extras.putBoolean(AccessibilitySettings.EXTRA_CHECKED, serviceEnabled); + extras.putString(AccessibilitySettings.EXTRA_TITLE, title); + extras.putParcelable(AccessibilitySettings.EXTRA_RESOLVE_INFO, resolveInfo); + extras.putString(AccessibilitySettings.EXTRA_SUMMARY, description); + + final String settingsClassName = info.getSettingsActivityName(); + if (!TextUtils.isEmpty(settingsClassName)) { + extras.putString(AccessibilitySettings.EXTRA_SETTINGS_TITLE, + getString(R.string.accessibility_menu_item_settings)); + extras.putString(AccessibilitySettings.EXTRA_SETTINGS_COMPONENT_NAME, + new ComponentName(packageName, settingsClassName).flattenToString()); + } + extras.putParcelable(AccessibilitySettings.EXTRA_COMPONENT_NAME, componentName); + + return extras; + } + + private void finish() { + Activity activity = getActivity(); + if (activity == null) { + return; + } + activity.finish(); + } +} diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java index 5e32e71f583..7abd98d3efe 100644 --- a/src/com/android/settings/core/gateway/SettingsGateway.java +++ b/src/com/android/settings/core/gateway/SettingsGateway.java @@ -24,6 +24,7 @@ import com.android.settings.Settings; import com.android.settings.TestingSettings; import com.android.settings.TetherSettings; import com.android.settings.TrustedCredentialsSettings; +import com.android.settings.accessibility.AccessibilityDetailsSettingsFragment; import com.android.settings.accessibility.AccessibilitySettings; import com.android.settings.accessibility.AccessibilitySettingsForSetupWizard; import com.android.settings.accessibility.CaptionPropertiesFragment; @@ -178,6 +179,7 @@ public class SettingsGateway { UsageAccessDetails.class.getName(), PrivacySettings.class.getName(), DeviceAdminSettings.class.getName(), + AccessibilityDetailsSettingsFragment.class.getName(), AccessibilitySettings.class.getName(), AccessibilitySettingsForSetupWizard.class.getName(), CaptionPropertiesFragment.class.getName(), diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragmentTest.java new file mode 100644 index 00000000000..9d5a5b89a75 --- /dev/null +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragmentTest.java @@ -0,0 +1,146 @@ +/* + * Copyright (C) 2019 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.accessibility; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; + +import android.accessibilityservice.AccessibilityServiceInfo; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.ResolveInfo; +import android.content.pm.ServiceInfo; +import android.os.Bundle; +import android.view.accessibility.AccessibilityManager; + +import androidx.fragment.app.FragmentActivity; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.shadow.api.Shadow; +import org.robolectric.shadows.ShadowAccessibilityManager; +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@RunWith(RobolectricTestRunner.class) +public class AccessibilityDetailsSettingsFragmentTest { + private final static String PACKAGE_NAME = "com.foo.bar"; + private final static String CLASS_NAME = PACKAGE_NAME + ".fake_a11y_service"; + private final static String COMPONENT_NAME = PACKAGE_NAME + "/" + CLASS_NAME; + + private Context mContext; + private AccessibilityDetailsSettingsFragment mFragment; + private ShadowAccessibilityManager mShadowAccessibilityManager; + @Mock private FragmentActivity mActivity; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application); + mFragment = spy(new AccessibilityDetailsSettingsFragment()); + mShadowAccessibilityManager = Shadow.extract(AccessibilityManager.getInstance(mContext)); + mShadowAccessibilityManager.setInstalledAccessibilityServiceList(getMockServiceList()); + + doReturn(mActivity).when(mFragment).getActivity(); + doReturn(mContext).when(mFragment).getContext(); + } + + @Test + public void onCreate_hasValidExtraComponentName_shouldOpenAccessibilityDetailsSettings() { + final Intent intent = new Intent(); + intent.putExtra(Intent.EXTRA_COMPONENT_NAME, COMPONENT_NAME); + doReturn(intent).when(mActivity).getIntent(); + + mFragment.onCreate(Bundle.EMPTY); + + verify(mFragment).openAccessibilityDetailsSettingsAndFinish(any()); + } + + @Test + public void onCreate_hasInvalidExtraComponentName_shouldOpenAccessibilityServicesList() { + final Intent intent = new Intent(); + intent.putExtra(Intent.EXTRA_COMPONENT_NAME, PACKAGE_NAME + "/.service"); + doReturn(intent).when(mActivity).getIntent(); + + mFragment.onCreate(Bundle.EMPTY); + + verify(mFragment).openAccessibilitySettingsAndFinish(); + } + + @Test + public void onCreate_hasNoExtraComponentName_shouldOpenAccessibilityServicesList() { + final Intent intent = new Intent(); + doReturn(intent).when(mActivity).getIntent(); + + mFragment.onCreate(Bundle.EMPTY); + + verify(mFragment).openAccessibilitySettingsAndFinish(); + } + + @Test + public void onCreate_extraComponentNameIsDisallowed_shouldOpenAccessibilityServicesList() { + final Intent intent = new Intent(); + intent.putExtra(Intent.EXTRA_COMPONENT_NAME, COMPONENT_NAME); + doReturn(intent).when(mActivity).getIntent(); + doReturn(false).when(mFragment).isServiceAllowed(any()); + + mFragment.onCreate(Bundle.EMPTY); + + verify(mFragment).openAccessibilitySettingsAndFinish(); + } + + private AccessibilityServiceInfo getMockAccessibilityServiceInfo() { + final ApplicationInfo applicationInfo = new ApplicationInfo(); + final ServiceInfo serviceInfo = new ServiceInfo(); + applicationInfo.packageName = PACKAGE_NAME; + serviceInfo.packageName = PACKAGE_NAME; + serviceInfo.name = CLASS_NAME; + serviceInfo.applicationInfo = applicationInfo; + + final ResolveInfo resolveInfo = new ResolveInfo(); + resolveInfo.serviceInfo = serviceInfo; + + try { + final AccessibilityServiceInfo info = new AccessibilityServiceInfo(resolveInfo, + mContext); + ComponentName componentName = ComponentName.unflattenFromString(COMPONENT_NAME); + info.setComponentName(componentName); + return info; + } catch (XmlPullParserException | IOException e) { + // Do nothing + } + + return null; + } + + private List getMockServiceList() { + final List infoList = new ArrayList<>(); + infoList.add(getMockAccessibilityServiceInfo()); + return infoList; + } +} From 617e745c4d805d61ddc3eca88a3b049a14738ced Mon Sep 17 00:00:00 2001 From: Hai Zhang Date: Thu, 28 Feb 2019 16:59:30 -0800 Subject: [PATCH 2/9] Use PermissionControllerService.isRoleVisible() in app info shortcut. Use the new PermissionControllerService.isRoleVisible() to hide roles that are not visible. Bug: 124452117 Bug: 124457823 Test: manual Change-Id: I4c61a2760dc62ecd8a52fba9e133e96a447c4a29 --- ...ltAppShortcutPreferenceControllerBase.java | 15 ++++- ...pShortcutPreferenceControllerBaseTest.java | 61 +++++++++++++++---- 2 files changed, 61 insertions(+), 15 deletions(-) diff --git a/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java b/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java index b056b2042b3..ca8dda3b167 100644 --- a/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java +++ b/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java @@ -29,6 +29,8 @@ import com.android.internal.util.CollectionUtils; import com.android.settings.R; import com.android.settings.core.BasePreferenceController; +import java.util.concurrent.Executor; + /* * Abstract base controller for the default app shortcut preferences that launches the default app * settings with the corresponding default app highlighted. @@ -41,6 +43,8 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre private final RoleManager mRoleManager; + private boolean mRoleVisible; + private boolean mAppQualified; private PreferenceScreen mPreferenceScreen; @@ -56,8 +60,13 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre final PermissionControllerManager permissionControllerManager = mContext.getSystemService(PermissionControllerManager.class); - permissionControllerManager.isApplicationQualifiedForRole(mRoleName, mPackageName, - mContext.getMainExecutor(), qualified -> { + final Executor executor = mContext.getMainExecutor(); + permissionControllerManager.isRoleVisible(mRoleName, executor, visible -> { + mRoleVisible = visible; + refreshAvailability(); + }); + permissionControllerManager.isApplicationQualifiedForRole(mRoleName, mPackageName, executor, + qualified -> { mAppQualified = qualified; refreshAvailability(); }); @@ -85,7 +94,7 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre if (mContext.getSystemService(UserManager.class).isManagedProfile()) { return DISABLED_FOR_USER; } - return mAppQualified ? AVAILABLE : UNSUPPORTED_ON_DEVICE; + return mRoleVisible && mAppQualified ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } @Override diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java index f3f4ca6f1f6..7b9bc253425 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java @@ -101,35 +101,72 @@ public class DefaultAppShortcutPreferenceControllerBaseTest { @Test public void - getAvailabilityStatus_noCallbackForIsApplicationNotQualifiedForRole_shouldReturnUnsupported() { + getAvailabilityStatus_noCallback_shouldReturnUnsupported() { + assertThat(mController.getAvailabilityStatus()).isEqualTo( + DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE); + } + + @Test + public void + getAvailabilityStatus_noCallbackForIsRoleNotVisible_shouldReturnUnsupported() { + setApplicationIsQualifiedForRole(true); + + assertThat(mController.getAvailabilityStatus()).isEqualTo( + DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE); + } + + @Test + public void getAvailabilityStatus_RoleIsNotVisible_shouldReturnUnsupported() { + setRoleIsVisible(false); + setApplicationIsQualifiedForRole(true); + + assertThat(mController.getAvailabilityStatus()).isEqualTo( + DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE); + } + + @Test + public void + getAvailabilityStatus_noCallbackForIsApplicationQualifiedForRole_shouldReturnUnsupported() { + setRoleIsVisible(true); + assertThat(mController.getAvailabilityStatus()).isEqualTo( DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE); } @Test public void getAvailabilityStatus_applicationIsNotQualifiedForRole_shouldReturnUnsupported() { - final ArgumentCaptor> callbackCaptor = ArgumentCaptor.forClass( - Consumer.class); - verify(mPermissionControllerManager).isApplicationQualifiedForRole(eq(TEST_ROLE_NAME), eq( - TEST_PACKAGE_NAME), any(Executor.class), callbackCaptor.capture()); - final Consumer callback = callbackCaptor.getValue(); - callback.accept(false); + setRoleIsVisible(true); + setApplicationIsQualifiedForRole(false); assertThat(mController.getAvailabilityStatus()).isEqualTo( DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE); } @Test - public void getAvailabilityStatus_applicationIsQualifiedForRole_shouldReturnAvailable() { + public void getAvailabilityStatus_RoleVisibleAndApplicationQualified_shouldReturnAvailable() { + setRoleIsVisible(true); + setApplicationIsQualifiedForRole(true); + + assertThat(mController.getAvailabilityStatus()).isEqualTo( + DefaultAppShortcutPreferenceControllerBase.AVAILABLE); + } + + private void setRoleIsVisible(boolean visible) { + final ArgumentCaptor> callbackCaptor = ArgumentCaptor.forClass( + Consumer.class); + verify(mPermissionControllerManager).isRoleVisible(eq(TEST_ROLE_NAME), any(Executor.class), + callbackCaptor.capture()); + final Consumer callback = callbackCaptor.getValue(); + callback.accept(visible); + } + + private void setApplicationIsQualifiedForRole(boolean qualified) { final ArgumentCaptor> callbackCaptor = ArgumentCaptor.forClass( Consumer.class); verify(mPermissionControllerManager).isApplicationQualifiedForRole(eq(TEST_ROLE_NAME), eq( TEST_PACKAGE_NAME), any(Executor.class), callbackCaptor.capture()); final Consumer callback = callbackCaptor.getValue(); - callback.accept(true); - - assertThat(mController.getAvailabilityStatus()).isEqualTo( - DefaultAppShortcutPreferenceControllerBase.AVAILABLE); + callback.accept(qualified); } @Test From 5124ab5d928c01830cbf8c7afcfb64522c46cc24 Mon Sep 17 00:00:00 2001 From: Ben Lin Date: Fri, 1 Mar 2019 16:13:23 -0800 Subject: [PATCH 3/9] Add flag to hide top-level accessibility. Bug: None Test: robotests Change-Id: I67cee6054e54389812bc025e637029547c8f2896 --- res/values/config.xml | 3 + res/xml/top_level_settings.xml | 3 +- ...evelAccessibilityPreferenceController.java | 38 ++++++++++++ tests/robotests/res/values-mcc999/config.xml | 1 + ...AccessibilityPreferenceControllerTest.java | 59 +++++++++++++++++++ 5 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 src/com/android/settings/accessibility/TopLevelAccessibilityPreferenceController.java create mode 100644 tests/robotests/src/com/android/settings/accessibility/TopLevelAccessibilityPreferenceControllerTest.java diff --git a/res/values/config.xml b/res/values/config.xml index beeac0c7db3..e6ada66a442 100755 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -330,6 +330,9 @@ true + + true + true diff --git a/res/xml/top_level_settings.xml b/res/xml/top_level_settings.xml index 9f4f90279f8..64b620a9bc1 100644 --- a/res/xml/top_level_settings.xml +++ b/res/xml/top_level_settings.xml @@ -123,7 +123,8 @@ android:summary="@string/accessibility_settings_summary" android:icon="@drawable/ic_homepage_accessibility" android:order="-20" - android:fragment="com.android.settings.accessibility.AccessibilitySettings"/> + android:fragment="com.android.settings.accessibility.AccessibilitySettings" + settings:controller="com.android.settings.accessibility.TopLevelAccessibilityPreferenceController"/> false false false + false false false false diff --git a/tests/robotests/src/com/android/settings/accessibility/TopLevelAccessibilityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/TopLevelAccessibilityPreferenceControllerTest.java new file mode 100644 index 00000000000..809d8b454a2 --- /dev/null +++ b/tests/robotests/src/com/android/settings/accessibility/TopLevelAccessibilityPreferenceControllerTest.java @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2019 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.accessibility; + +import static com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE; +import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.Context; + +import com.android.settings.R; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; + +@RunWith(RobolectricTestRunner.class) +public class TopLevelAccessibilityPreferenceControllerTest { + + private Context mContext; + private TopLevelAccessibilityPreferenceController mController; + + @Before + public void setUp() { + mContext = RuntimeEnvironment.application; + mController = new TopLevelAccessibilityPreferenceController(mContext, "test_key"); + } + + @Test + public void getAvailibilityStatus_availableByDefault() { + assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE_UNSEARCHABLE); + } + + @Test + @Config(qualifiers = "mcc999") + public void getAvailabilityStatus_unsupportedWhenSet() { + assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE); + } +} From cfa412f2e2794e3c7488ed41a2e4c056a31603b8 Mon Sep 17 00:00:00 2001 From: Svet Ganov Date: Mon, 18 Feb 2019 16:29:15 -0800 Subject: [PATCH 4/9] Slice and dice app ops - Settings Update the code to only pull and query the trsuted portion of the last/historical app op data. Test: manual bug:111061782 Change-Id: I55b8be1c6715ff60c7b31c80db21029fea595c8f --- .../settings/applications/appops/AppOpsState.java | 2 +- .../MockLocationAppPreferenceControllerTest.java | 5 +++-- .../fuelgauge/RestrictAppPreferenceControllerTest.java | 9 ++++++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/applications/appops/AppOpsState.java b/src/com/android/settings/applications/appops/AppOpsState.java index 2686b8c144b..3c8d6479380 100644 --- a/src/com/android/settings/applications/appops/AppOpsState.java +++ b/src/com/android/settings/applications/appops/AppOpsState.java @@ -618,7 +618,7 @@ public class AppOpsState { } AppOpsManager.OpEntry opEntry = new AppOpsManager.OpEntry( - permOps.get(k), AppOpsManager.MODE_ALLOWED, 0, 0, 0, -1, null); + permOps.get(k), AppOpsManager.MODE_ALLOWED); dummyOps.add(opEntry); addOp(entries, pkgOps, appEntry, opEntry, packageName == null, packageName == null ? 0 : opToOrder[opEntry.getOp()]); diff --git a/tests/robotests/src/com/android/settings/development/MockLocationAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/MockLocationAppPreferenceControllerTest.java index 73c0d8e04bd..993ba727332 100644 --- a/tests/robotests/src/com/android/settings/development/MockLocationAppPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/development/MockLocationAppPreferenceControllerTest.java @@ -15,6 +15,7 @@ import static org.mockito.Mockito.when; import android.app.Activity; import android.app.AppOpsManager; +import android.app.AppOpsManager.OpEntry; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; @@ -144,7 +145,7 @@ public class MockLocationAppPreferenceControllerTest { } private AppOpsManager.OpEntry createOpEntry(int opMode) { - return new AppOpsManager.OpEntry(0, opMode, 0l /* time */, 0 /* rejectTime */, - 0 /* duration */, 0 /* proxyUid */, null /* proxyPackage */); + return new OpEntry(0, false, opMode, null /*accessTimes*/, null /*rejectTimes*/, + null /*durations*/, null /* proxyUids */, null /* proxyPackages */); } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java index 368a93a4e40..78687688df4 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java @@ -77,13 +77,16 @@ public class RestrictAppPreferenceControllerTest { @Before public void setUp() { MockitoAnnotations.initMocks(this); - final AppOpsManager.OpEntry allowOpEntry = new AppOpsManager.OpEntry( - AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, AppOpsManager.MODE_ALLOWED, 0, 0, 0, 0, ""); + AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, false, AppOpsManager.MODE_ALLOWED, + null /*accessTimes*/, null /*rejectTimes*/, null /*durations*/, + null /* proxyUids */, null /* proxyPackages */); final List allowOps = new ArrayList<>(); allowOps.add(allowOpEntry); final AppOpsManager.OpEntry restrictedOpEntry = new AppOpsManager.OpEntry( - AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, AppOpsManager.MODE_IGNORED, 0, 0, 0, 0, ""); + AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, false, AppOpsManager.MODE_IGNORED, + null /*accessTimes*/, null /*rejectTimes*/, null /*durations*/, + null /* proxyUids */, null /* proxyPackages */); final List restrictedOps = new ArrayList<>(); restrictedOps.add(restrictedOpEntry); mAllowedPackageOps = new AppOpsManager.PackageOps( From 07e19728221b39689f040c5eb4c51dc0d3c6be03 Mon Sep 17 00:00:00 2001 From: cosmohsieh Date: Mon, 4 Mar 2019 08:53:22 +0800 Subject: [PATCH 5/9] [MAC Randomization] Extend char limitation for translation Extend char limit for translation Bug: b/126267054 Test: Manual Change-Id: Iafa0b6f10e1024889c826ecd45c855769d8f389e --- res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 1b260f8219d..e0bd1f3af9f 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2107,7 +2107,7 @@ IP settings Privacy - + Randomized MAC Add a device From b510ad24bc2a8e17ea692d96a21c632181827470 Mon Sep 17 00:00:00 2001 From: Sunny Shao Date: Mon, 4 Mar 2019 11:46:36 +0800 Subject: [PATCH 6/9] Use the colorAccent for ghost boy avatar Bug: 126926489 Test: manual review Change-Id: I3e6b90ba9b39f1fe59103d5aa453d8c41533cb11 --- res/drawable/ic_account_circle_24dp.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/res/drawable/ic_account_circle_24dp.xml b/res/drawable/ic_account_circle_24dp.xml index 8445adc5870..f41f57929c3 100644 --- a/res/drawable/ic_account_circle_24dp.xml +++ b/res/drawable/ic_account_circle_24dp.xml @@ -17,11 +17,12 @@ android:width="32dp" android:height="32dp" android:viewportWidth="24" - android:viewportHeight="24"> + android:viewportHeight="24" + android:tint="?android:attr/colorAccent"> From d3d7ca1588d4f1c06b5e42e74fae172168f9a776 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Mon, 4 Mar 2019 10:08:28 -0800 Subject: [PATCH 7/9] Add search key for fingerprint Fixes: 126683958 Test: search again Change-Id: I368da656656cef5c283f6df712469e106d4d88ed --- res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 1058c2825ec..136ad9b3585 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -7092,8 +7092,8 @@ face - - fingerprint + + fingerprint, add fingerprint dim screen, touchscreen, battery, smart brightness, dynamic brightness From ae0dd95ab68c332bb348503d7e7c839c44de41ee Mon Sep 17 00:00:00 2001 From: Alex Buynytskyy Date: Mon, 4 Mar 2019 13:01:55 -0800 Subject: [PATCH 8/9] Increasing char limit to 67 per linguists' request. Test: make RunSettingsRoboTests ROBOTEST_FILTER=development BUG: 126266234 Change-Id: Ia169343355a73c3493407c51dc728c868dfdf565 --- res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 5ff23366977..fd4b5f80a53 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1859,7 +1859,7 @@ %s wants to turn off Wi-Fi - + Verify bytecode of debuggable apps Allow ART to verify bytecode for debuggable apps From c7635e582f2fbbec80fde35c60b4ff24385778ae Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Mon, 4 Mar 2019 14:27:08 -0800 Subject: [PATCH 9/9] Remove task affinity on misc settings The task affinity is making upnav button acting strange. Fixes: 118789456 Fixes: 127335758 Test: rebuild and go through Settings search Change-Id: I911298dfc995c271cf0d34f24cd87caecd153b34 --- AndroidManifest.xml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index e60637582a7..c2bb484fe72 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -932,8 +932,7 @@ + android:label="@string/applications_settings"> @@ -1306,8 +1305,7 @@ + android:label="@string/usage_access_title">