diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 4e71f4adab0..29f69b8e743 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"> @@ -1362,6 +1360,20 @@ android:value="true" /> + + + + + + + + + + android:viewportHeight="24" + android:tint="?android:attr/colorAccent"> 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/values/strings.xml b/res/values/strings.xml index 0789a95c873..0d6eaeb2527 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 @@ -2107,7 +2107,7 @@ IP settings Privacy - + Randomized MAC Add a device @@ -7092,8 +7092,8 @@ face - - fingerprint + + fingerprint, add fingerprint dim screen, touchscreen, battery, smart brightness, dynamic brightness 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"/> 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/accessibility/TopLevelAccessibilityPreferenceController.java b/src/com/android/settings/accessibility/TopLevelAccessibilityPreferenceController.java new file mode 100644 index 00000000000..41040a0d8e5 --- /dev/null +++ b/src/com/android/settings/accessibility/TopLevelAccessibilityPreferenceController.java @@ -0,0 +1,38 @@ +/* + * 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 android.content.Context; + +import com.android.settings.R; +import com.android.settings.core.BasePreferenceController; + +public class TopLevelAccessibilityPreferenceController extends BasePreferenceController { + + public TopLevelAccessibilityPreferenceController(Context context, + String preferenceKey) { + super(context, preferenceKey); + } + + @Override + public int getAvailabilityStatus() { + return mContext.getResources().getBoolean(R.bool.config_show_top_level_accessibility) + ? AVAILABLE_UNSEARCHABLE + : UNSUPPORTED_ON_DEVICE; + } +} + 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/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/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/res/values-mcc999/config.xml b/tests/robotests/res/values-mcc999/config.xml index b54781d9fbc..776a4d0902f 100644 --- a/tests/robotests/res/values-mcc999/config.xml +++ b/tests/robotests/res/values-mcc999/config.xml @@ -57,6 +57,7 @@ false false false + false false false false 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; + } +} 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); + } +} 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 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(