From 01cc290446f3093efb05754b3b8bfa0c1cf1612e Mon Sep 17 00:00:00 2001 From: jasonwshsu Date: Wed, 15 Sep 2021 19:37:48 +0800 Subject: [PATCH 1/7] Add the AccessibilitySearchFeatureProvider mock in testutils/FakeFeatureFactory * Complete the missing part in ag/14299190 Bug: 184171842 Test: build pass Change-Id: I020f218b58dca132bdb093163f764e125b8ea816 --- .../src/com/android/settings/testutils/FakeFeatureFactory.java | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java index ba7e0bd02b4..a05436c809b 100644 --- a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java +++ b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java @@ -124,6 +124,7 @@ public class FakeFeatureFactory extends FeatureFactory { extraAppInfoFeatureProvider = mock(ExtraAppInfoFeatureProvider.class); securitySettingsFeatureProvider = mock(SecuritySettingsFeatureProvider.class); gameSettingsFeatureProvider = mock(GameSettingsFeatureProvider.class); + mAccessibilitySearchFeatureProvider = mock(AccessibilitySearchFeatureProvider.class); } @Override From 3d0f12d043a9359f4de15f4eb677ef9c5a0296c2 Mon Sep 17 00:00:00 2001 From: jasonwshsu Date: Fri, 10 Sep 2021 19:07:30 +0800 Subject: [PATCH 2/7] Support ability to add different page id for different accessibility service page in settings. Bug: 190344664 Test: build pass Change-Id: I6cc90b27dcbb5075d13e3c59fe754309182b4d0a --- .../AccessibilityMetricsFeatureProvider.java | 36 +++++++++++++++++++ ...cessibilityMetricsFeatureProviderImpl.java | 32 +++++++++++++++++ ...cessibilityActivityPreferenceFragment.java | 17 +++++++-- ...ccessibilityServicePreferenceFragment.java | 11 +++++- .../settings/overlay/FeatureFactory.java | 18 ++++++---- .../settings/overlay/FeatureFactoryImpl.java | 11 ++++++ .../testutils/FakeFeatureFactory.java | 8 +++++ .../testutils/FakeFeatureFactory.java | 8 +++++ 8 files changed, 132 insertions(+), 9 deletions(-) create mode 100644 src/com/android/settings/accessibility/AccessibilityMetricsFeatureProvider.java create mode 100644 src/com/android/settings/accessibility/AccessibilityMetricsFeatureProviderImpl.java diff --git a/src/com/android/settings/accessibility/AccessibilityMetricsFeatureProvider.java b/src/com/android/settings/accessibility/AccessibilityMetricsFeatureProvider.java new file mode 100644 index 00000000000..a9d7c0551d1 --- /dev/null +++ b/src/com/android/settings/accessibility/AccessibilityMetricsFeatureProvider.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2021 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.ComponentName; + +import androidx.annotation.Nullable; + +/** + * Provider for Accessibility metrics related features. + */ +public interface AccessibilityMetricsFeatureProvider { + + /** + * Returns {@link android.app.settings.SettingsEnums} value according to the {@code + * componentName}. + * + * @param componentName the component name of the downloaded service or activity + * @return value in {@link android.app.settings.SettingsEnums} + */ + int getDownloadedFeatureMetricsCategory(@Nullable ComponentName componentName); +} diff --git a/src/com/android/settings/accessibility/AccessibilityMetricsFeatureProviderImpl.java b/src/com/android/settings/accessibility/AccessibilityMetricsFeatureProviderImpl.java new file mode 100644 index 00000000000..0f85f38f571 --- /dev/null +++ b/src/com/android/settings/accessibility/AccessibilityMetricsFeatureProviderImpl.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2021 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.app.settings.SettingsEnums; +import android.content.ComponentName; + +/** + * Provider implementation for Accessibility metrics related features. + */ +public class AccessibilityMetricsFeatureProviderImpl implements + AccessibilityMetricsFeatureProvider { + + @Override + public int getDownloadedFeatureMetricsCategory(ComponentName componentName) { + return SettingsEnums.ACCESSIBILITY_SERVICE; + } +} diff --git a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java index 98090ac1dba..3b15830a153 100644 --- a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java +++ b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java @@ -41,6 +41,7 @@ import androidx.annotation.Nullable; import androidx.preference.Preference; import com.android.settings.R; +import com.android.settings.overlay.FeatureFactory; import java.util.ArrayList; import java.util.List; @@ -51,6 +52,19 @@ public class LaunchAccessibilityActivityPreferenceFragment extends ToggleFeature private static final String EMPTY_STRING = ""; protected static final String KEY_LAUNCH_PREFERENCE = "launch_preference"; + @Override + public int getMetricsCategory() { + // Retrieve from getArguments() directly because this function will be executed from + // onAttach(), but variable mComponentName only available after onProcessArguments() + // which comes from onCreateView(). + final ComponentName componentName = getArguments().getParcelable( + AccessibilitySettings.EXTRA_COMPONENT_NAME); + + return FeatureFactory.getFactory(getActivity().getApplicationContext()) + .getAccessibilityMetricsFeatureProvider() + .getDownloadedFeatureMetricsCategory(componentName); + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -60,7 +74,7 @@ public class LaunchAccessibilityActivityPreferenceFragment extends ToggleFeature initLaunchPreference(); removePreference(KEY_USE_SERVICE_PREFERENCE); return view; - }; + } @Override protected void onPreferenceToggled(String preferenceKey, boolean enabled) { @@ -70,7 +84,6 @@ public class LaunchAccessibilityActivityPreferenceFragment extends ToggleFeature @Override protected void onProcessArguments(Bundle arguments) { super.onProcessArguments(arguments); - mComponentName = arguments.getParcelable(AccessibilitySettings.EXTRA_COMPONENT_NAME); final ActivityInfo info = getAccessibilityShortcutInfo().getActivityInfo(); mPackageName = info.loadLabel(getPackageManager()).toString(); diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java index 0e209aa77af..bd634065103 100644 --- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java @@ -54,6 +54,7 @@ import androidx.annotation.Nullable; import com.android.internal.widget.LockPatternUtils; import com.android.settings.R; import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType; +import com.android.settings.overlay.FeatureFactory; import com.android.settings.password.ConfirmDeviceCredentialActivity; import com.android.settingslib.accessibility.AccessibilityUtils; @@ -84,7 +85,15 @@ public class ToggleAccessibilityServicePreferenceFragment extends @Override public int getMetricsCategory() { - return SettingsEnums.ACCESSIBILITY_SERVICE; + // Retrieve from getArguments() directly because this function will be executed from + // onAttach(), but variable mComponentName only available after onProcessArguments() + // which comes from onCreateView(). + final ComponentName componentName = getArguments().getParcelable( + AccessibilitySettings.EXTRA_COMPONENT_NAME); + + return FeatureFactory.getFactory(getActivity().getApplicationContext()) + .getAccessibilityMetricsFeatureProvider() + .getDownloadedFeatureMetricsCategory(componentName); } @Override diff --git a/src/com/android/settings/overlay/FeatureFactory.java b/src/com/android/settings/overlay/FeatureFactory.java index cfdc9eb5b62..93af23193d4 100644 --- a/src/com/android/settings/overlay/FeatureFactory.java +++ b/src/com/android/settings/overlay/FeatureFactory.java @@ -23,6 +23,7 @@ import android.util.Log; import androidx.annotation.Nullable; import com.android.settings.R; +import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider; import com.android.settings.accessibility.AccessibilitySearchFeatureProvider; import com.android.settings.accounts.AccountFeatureProvider; import com.android.settings.applications.ApplicationFeatureProvider; @@ -111,13 +112,13 @@ public abstract class FeatureFactory { public abstract PowerUsageFeatureProvider getPowerUsageFeatureProvider(Context context); /** - * Retrieve implementation for Battery Status feature. + * Retrieves implementation for Battery Status feature. */ public abstract BatteryStatusFeatureProvider getBatteryStatusFeatureProvider( Context context); /** - * Get implementation for Battery Settings provider. + * Gets implementation for Battery Settings provider. */ public abstract BatterySettingsFeatureProvider getBatterySettingsFeatureProvider( Context context); @@ -161,25 +162,30 @@ public abstract class FeatureFactory { public abstract WifiTrackerLibProvider getWifiTrackerLibProvider(); /** - * Retrieve implementation for Extra App Info feature. + * Retrieves implementation for Extra App Info feature. */ public abstract ExtraAppInfoFeatureProvider getExtraAppInfoFeatureProvider(); /** - * Retrieve implementation for SecuritySettings feature. + * Retrieves implementation for SecuritySettings feature. */ public abstract SecuritySettingsFeatureProvider getSecuritySettingsFeatureProvider(); /** - * Retrieve implementation for Game Settings feature. + * Retrieves implementation for Game Settings feature. */ public abstract GameSettingsFeatureProvider getGameSettingsFeatureProvider(); /** - * Retrieve implementation for Accessibility search index feature. + * Retrieves implementation for Accessibility search index feature. */ public abstract AccessibilitySearchFeatureProvider getAccessibilitySearchFeatureProvider(); + /** + * Retrieves implementation for Accessibility metrics category feature. + */ + public abstract AccessibilityMetricsFeatureProvider getAccessibilityMetricsFeatureProvider(); + public static final class FactoryNotFoundException extends RuntimeException { public FactoryNotFoundException(Throwable throwable) { super("Unable to create factory. Did you misconfigure Proguard?", throwable); diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java index 9890a109641..2c63856d353 100644 --- a/src/com/android/settings/overlay/FeatureFactoryImpl.java +++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java @@ -25,6 +25,8 @@ import android.os.UserManager; import androidx.annotation.Keep; +import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider; +import com.android.settings.accessibility.AccessibilityMetricsFeatureProviderImpl; import com.android.settings.accessibility.AccessibilitySearchFeatureProvider; import com.android.settings.accessibility.AccessibilitySearchFeatureProviderImpl; import com.android.settings.accounts.AccountFeatureProvider; @@ -109,6 +111,7 @@ public class FeatureFactoryImpl extends FeatureFactory { private SecuritySettingsFeatureProvider mSecuritySettingsFeatureProvider; private GameSettingsFeatureProvider mGameSettingsFeatureProvider; private AccessibilitySearchFeatureProvider mAccessibilitySearchFeatureProvider; + private AccessibilityMetricsFeatureProvider mAccessibilityMetricsFeatureProvider; @Override public SupportFeatureProvider getSupportFeatureProvider(Context context) { @@ -346,4 +349,12 @@ public class FeatureFactoryImpl extends FeatureFactory { } return mAccessibilitySearchFeatureProvider; } + + @Override + public AccessibilityMetricsFeatureProvider getAccessibilityMetricsFeatureProvider() { + if (mAccessibilityMetricsFeatureProvider == null) { + mAccessibilityMetricsFeatureProvider = new AccessibilityMetricsFeatureProviderImpl(); + } + return mAccessibilityMetricsFeatureProvider; + } } diff --git a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java index de1af23c6ff..bc430e832e5 100644 --- a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java +++ b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java @@ -21,6 +21,7 @@ import static org.mockito.Mockito.when; import android.content.Context; +import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider; import com.android.settings.accessibility.AccessibilitySearchFeatureProvider; import com.android.settings.accounts.AccountFeatureProvider; import com.android.settings.applications.ApplicationFeatureProvider; @@ -89,6 +90,7 @@ public class FakeFeatureFactory extends FeatureFactory { public SecuritySettingsFeatureProvider securitySettingsFeatureProvider; public GameSettingsFeatureProvider gameSettingsFeatureProvider; public AccessibilitySearchFeatureProvider mAccessibilitySearchFeatureProvider; + public AccessibilityMetricsFeatureProvider mAccessibilityMetricsFeatureProvider; /** * Call this in {@code @Before} method of the test class to use fake factory. @@ -139,6 +141,7 @@ public class FakeFeatureFactory extends FeatureFactory { securitySettingsFeatureProvider = mock(SecuritySettingsFeatureProvider.class); gameSettingsFeatureProvider = mock(GameSettingsFeatureProvider.class); mAccessibilitySearchFeatureProvider = mock(AccessibilitySearchFeatureProvider.class); + mAccessibilityMetricsFeatureProvider = mock(AccessibilityMetricsFeatureProvider.class); } @Override @@ -280,4 +283,9 @@ public class FakeFeatureFactory extends FeatureFactory { public AccessibilitySearchFeatureProvider getAccessibilitySearchFeatureProvider() { return mAccessibilitySearchFeatureProvider; } + + @Override + public AccessibilityMetricsFeatureProvider getAccessibilityMetricsFeatureProvider() { + return mAccessibilityMetricsFeatureProvider; + } } diff --git a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java index a05436c809b..0b6061c7115 100644 --- a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java +++ b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java @@ -19,6 +19,7 @@ import static org.mockito.Mockito.mock; import android.content.Context; +import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider; import com.android.settings.accessibility.AccessibilitySearchFeatureProvider; import com.android.settings.accounts.AccountFeatureProvider; import com.android.settings.applications.ApplicationFeatureProvider; @@ -84,6 +85,7 @@ public class FakeFeatureFactory extends FeatureFactory { public SecuritySettingsFeatureProvider securitySettingsFeatureProvider; public GameSettingsFeatureProvider gameSettingsFeatureProvider; public AccessibilitySearchFeatureProvider mAccessibilitySearchFeatureProvider; + public AccessibilityMetricsFeatureProvider mAccessibilityMetricsFeatureProvider; /** * Call this in {@code @Before} method of the test class to use fake factory. @@ -125,6 +127,7 @@ public class FakeFeatureFactory extends FeatureFactory { securitySettingsFeatureProvider = mock(SecuritySettingsFeatureProvider.class); gameSettingsFeatureProvider = mock(GameSettingsFeatureProvider.class); mAccessibilitySearchFeatureProvider = mock(AccessibilitySearchFeatureProvider.class); + mAccessibilityMetricsFeatureProvider = mock(AccessibilityMetricsFeatureProvider.class); } @Override @@ -266,4 +269,9 @@ public class FakeFeatureFactory extends FeatureFactory { public AccessibilitySearchFeatureProvider getAccessibilitySearchFeatureProvider() { return mAccessibilitySearchFeatureProvider; } + + @Override + public AccessibilityMetricsFeatureProvider getAccessibilityMetricsFeatureProvider() { + return mAccessibilityMetricsFeatureProvider; + } } From e4084028b366581be06dba394fc0fa9ee737ec12 Mon Sep 17 00:00:00 2001 From: Arc Wang Date: Tue, 14 Sep 2021 18:46:18 +0800 Subject: [PATCH 3/7] Merge intent extra to deep link intent target for large screen devices Sender of deep link intent may want to send intent extra data to the deep link target Activity by merging intent extra. Bug: 197048599 Bug: 197926040 Test: manual 1. Click quick Setting 'Internet button'. 2. Click the gear button of a connected Wi-Fi. 3. Observe if the Wi-Fi detail page shows the connected Wi-Fi. Change-Id: I32040ee21a747cae710df2e12a8f5b66aff086fa --- src/com/android/settings/SettingsActivity.java | 1 + .../android/settings/homepage/SettingsHomepageActivity.java | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index b82bb765629..d5730a12fbd 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -380,6 +380,7 @@ public class SettingsActivity extends SettingsBaseActivity // It's a deep link intent, SettingsHomepageActivity will set SplitPairRule and start it. final Intent trampolineIntent = new Intent(android.provider.Settings.ACTION_SETTINGS_LARGE_SCREEN_DEEP_LINK); + trampolineIntent.replaceExtras(intent); trampolineIntent.putExtra( android.provider.Settings.EXTRA_SETTINGS_LARGE_SCREEN_DEEP_LINK_INTENT_URI, intent.toUri(Intent.URI_INTENT_SCHEME)); diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java index f073a618e05..db4ce54db90 100644 --- a/src/com/android/settings/homepage/SettingsHomepageActivity.java +++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java @@ -213,6 +213,9 @@ public class SettingsHomepageActivity extends FragmentActivity implements targetIntent.setFlags(targetIntent.getFlags() & ~Intent.FLAG_ACTIVITY_NEW_TASK); + // Sender of intent may want to send intent extra data to the destination of targetIntent. + targetIntent.replaceExtras(intent); + targetIntent.putExtra(EXTRA_IS_FROM_SETTINGS_HOMEPAGE, true); // Set 2-pane pair rule for the external deep link page. From e303658f0d2cb167d6da6e1574aa4db4a5de3c0f Mon Sep 17 00:00:00 2001 From: Alan Huang Date: Wed, 22 Sep 2021 18:18:35 +0000 Subject: [PATCH 4/7] Add the Spatial audio toggle in SoundSettings The Spatial audio toggle will be showed only on supported devices Test: robotest, manual checked the UI, but not the actual functionality due to doesn't have supported device in hand Bug: 191870827 Change-Id: I7db264902b03fddb7808676d8cb98cbe045deda1 --- res/values/strings.xml | 3 + res/xml/sound_settings.xml | 7 ++ .../SpatialAudioPreferenceController.java | 56 ++++++++++++ .../SpatialAudioPreferenceControllerTest.java | 91 +++++++++++++++++++ 4 files changed, 157 insertions(+) create mode 100644 src/com/android/settings/notification/SpatialAudioPreferenceController.java create mode 100644 tests/robotests/src/com/android/settings/notification/SpatialAudioPreferenceControllerTest.java diff --git a/res/values/strings.xml b/res/values/strings.xml index 54e6894025b..11625f6016f 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -8489,6 +8489,9 @@ Other sounds + + Spatial audio + Dial pad tones diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml index 56632a5e993..e30f13915bf 100644 --- a/res/xml/sound_settings.xml +++ b/res/xml/sound_settings.xml @@ -154,6 +154,13 @@ android:ringtoneType="alarm" android:order="-60"/> + + + Date: Thu, 23 Sep 2021 14:47:15 +0800 Subject: [PATCH 5/7] Fix not able to add Settings shortcut widget problem After users select a shortcut item in CreateShortcutActivity, launchers need to get result from CreateShortcutActivity. For large screen devices, Settings deep link will start DeepLinkHomepageActivity and then DeepLinkHomepageActivity starts the deep link page. The CreateShortcutActivity result deos not forward to launcher and there is no shortcut added. This change uses Intent.FLAG_ACTIVITY_FORWARD_RESULT to forward result from CreateShortcutActivity to launcher. Bug: 200889769 Test: manual Long click launcher -> Widget -> Settings -> select an item and check if it adds a short on launcher. Change-Id: Idd5fc642be5c1fb2f747316c3ddcd9b7f0b33852 --- src/com/android/settings/SettingsActivity.java | 1 + src/com/android/settings/homepage/SettingsHomepageActivity.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index d5730a12fbd..dc5d68ffc45 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -384,6 +384,7 @@ public class SettingsActivity extends SettingsBaseActivity trampolineIntent.putExtra( android.provider.Settings.EXTRA_SETTINGS_LARGE_SCREEN_DEEP_LINK_INTENT_URI, intent.toUri(Intent.URI_INTENT_SCHEME)); + trampolineIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); startActivity(trampolineIntent); return true; diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java index 5df7b7a3cb1..d6a8a927527 100644 --- a/src/com/android/settings/homepage/SettingsHomepageActivity.java +++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java @@ -212,6 +212,7 @@ public class SettingsHomepageActivity extends FragmentActivity implements intent.setAction(null); targetIntent.setFlags(targetIntent.getFlags() & ~Intent.FLAG_ACTIVITY_NEW_TASK); + targetIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); // Sender of intent may want to send intent extra data to the destination of targetIntent. targetIntent.replaceExtras(intent); From bab407420450e4baf539b44e8f7fe22e677fab63 Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Thu, 23 Sep 2021 09:49:08 +0200 Subject: [PATCH 6/7] Fix error prone build with spatial audio settings test Add cast when getting AudioManager per https://errorprone.info/bugpattern/MockitoCast Bug: 191870827 Test: make Change-Id: Icf93e68ec373f9ce145440f97fbe8d02c1716983 --- .../notification/SpatialAudioPreferenceControllerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/robotests/src/com/android/settings/notification/SpatialAudioPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/SpatialAudioPreferenceControllerTest.java index ae470544988..66d18ec8308 100644 --- a/tests/robotests/src/com/android/settings/notification/SpatialAudioPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/SpatialAudioPreferenceControllerTest.java @@ -56,7 +56,7 @@ public class SpatialAudioPreferenceControllerTest { public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); - when(mContext.getSystemService(AudioManager.class)).thenReturn(mAudioManager); + when((Object) mContext.getSystemService(AudioManager.class)).thenReturn(mAudioManager); when(mAudioManager.getSpatializer()).thenReturn(mSpatializer); mController = new SpatialAudioPreferenceController(mContext); } From 9de5fe158d1f5114c8e59ece8830c4d8d11c399b Mon Sep 17 00:00:00 2001 From: ykhung Date: Thu, 23 Sep 2021 16:56:07 +0800 Subject: [PATCH 7/7] [B&R] avoid to backup & restore app which is in the PowerSaveWhitelistExceptIdle BYPASS_INCLUSIVE_LANGUAGE_REASON=legacy method name Test command for backup manager: adb shell bmgr backupnow com.android.settings adb shell dumpsys backup | grep Current adb shell bmgr restore 3e9867a7660315b8 com.android.settings Bug: 192523697 Test: make SettingsRoboTests Change-Id: I78f34870af3146698e6d1b9fbc5ec4385a8d5384 --- .../fuelgauge/BatteryBackupHelper.java | 4 +++- .../fuelgauge/BatteryBackupHelperTest.java | 20 +++++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java index af16edbe018..24080fe9809 100644 --- a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java +++ b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java @@ -263,7 +263,9 @@ public final class BatteryBackupHelper implements BackupHelper { private boolean isSystemOrDefaultApp(String packageName) { final PowerAllowlistBackend powerAllowlistBackend = getPowerAllowlistBackend(); return powerAllowlistBackend.isSysAllowlisted(packageName) - || powerAllowlistBackend.isDefaultActiveApp(packageName); + || powerAllowlistBackend.isDefaultActiveApp(packageName) + // Optimize mode only for app which is in the allow list not idle app. + || powerAllowlistBackend.isAllowlistedExceptIdle(packageName); } private List getInstalledApplications() { diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java index 5ac8553b91c..aa1caf98d29 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java @@ -114,6 +114,9 @@ public final class BatteryBackupHelperTest { mockUid(1001 /*fake uid*/, PACKAGE_NAME1); mockUid(1002 /*fake uid*/, PACKAGE_NAME2); mockUid(BatteryUtils.UID_NULL, PACKAGE_NAME3); + doReturn(false).when(mPowerAllowlistBackend).isDefaultActiveApp(anyString()); + doReturn(false).when(mPowerAllowlistBackend).isDefaultActiveApp(anyString()); + doReturn(false).when(mPowerAllowlistBackend).isAllowlistedExceptIdle(anyString()); } @After @@ -218,7 +221,6 @@ public final class BatteryBackupHelperTest { createTestingData(PACKAGE_NAME1, PACKAGE_NAME2, PACKAGE_NAME3); // Sets "com.android.testing.1" as system app. doReturn(true).when(mPowerAllowlistBackend).isSysAllowlisted(PACKAGE_NAME1); - doReturn(false).when(mPowerAllowlistBackend).isDefaultActiveApp(anyString()); mBatteryBackupHelper.backupOptimizationMode(mBackupDataOutput, allowlistedApps); @@ -234,7 +236,21 @@ public final class BatteryBackupHelperTest { createTestingData(PACKAGE_NAME1, PACKAGE_NAME2, PACKAGE_NAME3); // Sets "com.android.testing.1" as device default app. doReturn(true).when(mPowerAllowlistBackend).isDefaultActiveApp(PACKAGE_NAME1); - doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(anyString()); + + mBatteryBackupHelper.backupOptimizationMode(mBackupDataOutput, allowlistedApps); + + // "com.android.testing.2" for RESTRICTED mode. + final String expectedResult = PACKAGE_NAME2 + ":1,"; + verifyBackupData(expectedResult); + } + + @Test + public void backupOptimizationMode_backupOptimizationAndIgnoreAppInTheAllowlist() + throws Exception { + final List allowlistedApps = Arrays.asList(PACKAGE_NAME1); + createTestingData(PACKAGE_NAME1, PACKAGE_NAME2, PACKAGE_NAME3); + // Sets "com.android.testing.1" in the allowlist. + doReturn(true).when(mPowerAllowlistBackend).isAllowlistedExceptIdle(PACKAGE_NAME1); mBatteryBackupHelper.backupOptimizationMode(mBackupDataOutput, allowlistedApps);