From 80ef43e7be6ab675f634a486cae50a9067a9971c Mon Sep 17 00:00:00 2001 From: "Torne (Richard Coles)" Date: Fri, 19 Jan 2024 15:51:03 -0500 Subject: [PATCH 1/7] Use WebViewUpdateManager instead of raw AIDL. Use the new IPC wrapper WebViewUpdateManager instead of directly consuming IWebViewUpdateService. Bug: 319292658 Test: m RunSettingsRoboTests Change-Id: I75a3788aeac9757ce423454c4b6a2a63f5c4f4b2 --- .../webview/WebViewUpdateServiceWrapper.java | 53 +++++++++++++------ 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java b/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java index 05855e4f348..546320c2aac 100644 --- a/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java +++ b/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java @@ -20,12 +20,12 @@ import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; -import android.os.RemoteException; import android.util.Log; import android.webkit.IWebViewUpdateService; import android.webkit.UserPackage; import android.webkit.WebViewFactory; import android.webkit.WebViewProviderInfo; +import android.webkit.WebViewUpdateManager; import android.widget.Toast; import androidx.annotation.Nullable; @@ -44,8 +44,12 @@ public class WebViewUpdateServiceWrapper { */ public PackageInfo getCurrentWebViewPackage() { try { - return WebViewFactory.getUpdateService().getCurrentWebViewPackage(); - } catch (RemoteException e) { + if (android.webkit.Flags.updateServiceIpcWrapper()) { + return WebViewUpdateManager.getInstance().getCurrentWebViewPackage(); + } else { + return WebViewFactory.getUpdateService().getCurrentWebViewPackage(); + } + } catch (Exception e) { Log.e(TAG, e.toString()); } return null; @@ -59,8 +63,13 @@ public class WebViewUpdateServiceWrapper { public List getValidWebViewApplicationInfos(Context context) { WebViewProviderInfo[] providers = null; try { - providers = WebViewFactory.getUpdateService().getValidWebViewPackages(); - } catch (RemoteException e) { + if (android.webkit.Flags.updateServiceIpcWrapper()) { + providers = context.getSystemService(WebViewUpdateManager.class) + .getValidWebViewPackages(); + } else { + providers = WebViewFactory.getUpdateService().getValidWebViewPackages(); + } + } catch (Exception e) { } List pkgs = new ArrayList<>(); for (WebViewProviderInfo provider : providers) { @@ -80,10 +89,15 @@ public class WebViewUpdateServiceWrapper { */ public boolean setWebViewProvider(String packageName) { try { - return packageName.equals( - WebViewFactory.getUpdateService().changeProviderAndSetting(packageName)); - } catch (RemoteException e) { - Log.e(TAG, "RemoteException when trying to change provider to " + packageName, e); + if (android.webkit.Flags.updateServiceIpcWrapper()) { + return packageName.equals( + WebViewUpdateManager.getInstance().changeProviderAndSetting(packageName)); + } else { + return packageName.equals( + WebViewFactory.getUpdateService().changeProviderAndSetting(packageName)); + } + } catch (Exception e) { + Log.e(TAG, "Exception when trying to change provider to " + packageName, e); } return false; } @@ -112,18 +126,23 @@ public class WebViewUpdateServiceWrapper { */ @Nullable public String getDefaultWebViewPackageName() { + WebViewProviderInfo provider = null; try { - IWebViewUpdateService service = WebViewFactory.getUpdateService(); - if (service != null) { - WebViewProviderInfo provider = service.getDefaultWebViewPackage(); - if (provider != null) { - return provider.packageName; + if (android.webkit.Flags.updateServiceIpcWrapper()) { + WebViewUpdateManager manager = WebViewUpdateManager.getInstance(); + if (manager != null) { + provider = manager.getDefaultWebViewPackage(); + } + } else { + IWebViewUpdateService service = WebViewFactory.getUpdateService(); + if (service != null) { + provider = service.getDefaultWebViewPackage(); } } - } catch (RemoteException e) { - Log.e(TAG, "RemoteException when trying to fetch default WebView package Name", e); + } catch (Exception e) { + Log.e(TAG, "Exception when trying to fetch default WebView package Name", e); } - return null; + return provider != null ? provider.packageName : null; } static final int PACKAGE_FLAGS = PackageManager.MATCH_ANY_USER; From 01735e6b40cf9156ffa9a30fcee453ee02b0f085 Mon Sep 17 00:00:00 2001 From: Aditya Choudhary Date: Mon, 5 Feb 2024 15:41:26 +0000 Subject: [PATCH 2/7] [DON'T BLOCK] Test ownership migration rules This CL is created as a best effort to migrate test targets to the new android ownership model. If you find incorrect or unnecessary attribution in this CL, please create a separate CL to fix that. For more details please refer to the link below, go/new-android-ownership-model Bug: 304529413 Test: N/A Change-Id: I7fbd55a92f4302a6e03bcff0283737fd9295165d Merged-In: I7fbd55a92f4302a6e03bcff0283737fd9295165d --- Android.bp | 16 +++++++++++----- protos/Android.bp | 1 + .../android/settings/fuelgauge/protos/Android.bp | 1 + tests/anomaly-tester/Android.bp | 1 + tests/componenttests/Android.bp | 1 + .../InstrumentedEntitlementApp/Android.bp | 1 + tests/perftests/Android.bp | 1 + tests/robotests/Android.bp | 1 + tests/spa_unit/Android.bp | 1 + tests/uitests/Android.bp | 1 + tests/unit/Android.bp | 1 + 11 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Android.bp b/Android.bp index 31895db32b1..9599f9d5c05 100644 --- a/Android.bp +++ b/Android.bp @@ -1,4 +1,5 @@ package { + default_team: "trendy_team_android_settings_app", default_applicable_licenses: ["packages_apps_Settings_license"], } @@ -23,8 +24,8 @@ java_library { genrule { name: "statslog-settings-java-gen", tools: ["stats-log-api-gen"], - cmd: "$(location stats-log-api-gen) --java $(out) --module settings" - + " --javaPackage com.android.settings.core.instrumentation --javaClass SettingsStatsLog", + cmd: "$(location stats-log-api-gen) --java $(out) --module settings" + + " --javaPackage com.android.settings.core.instrumentation --javaClass SettingsStatsLog", out: ["com/android/settings/core/instrumentation/SettingsStatsLog.java"], } @@ -43,7 +44,6 @@ java_library { ], } - // Build the Settings APK android_library { name: "Settings-core", @@ -54,7 +54,10 @@ android_library { "SpaPrivilegedLib-defaults", ], - srcs: ["src/**/*.java", "src/**/*.kt"], + srcs: [ + "src/**/*.java", + "src/**/*.kt", + ], resource_dirs: [ "res", "res-export", // for external usage @@ -158,7 +161,10 @@ filegroup { // separately for different modules. filegroup { name: "Settings_srcs", - srcs: ["src/**/*.java", "src/**/*.kt"], + srcs: [ + "src/**/*.java", + "src/**/*.kt", + ], } // Deprecated. Do not depend on this, only depend on Settings-core, and its manifest is also diff --git a/protos/Android.bp b/protos/Android.bp index d546e2db7fe..560851a0862 100644 --- a/protos/Android.bp +++ b/protos/Android.bp @@ -1,4 +1,5 @@ package { + default_team: "trendy_team_android_settings_app", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "packages_apps_Settings_license" diff --git a/src/com/android/settings/fuelgauge/protos/Android.bp b/src/com/android/settings/fuelgauge/protos/Android.bp index 531bdc32293..462962b63c5 100644 --- a/src/com/android/settings/fuelgauge/protos/Android.bp +++ b/src/com/android/settings/fuelgauge/protos/Android.bp @@ -1,4 +1,5 @@ package { + default_team: "trendy_team_android_settings_app", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "packages_apps_Settings_license" diff --git a/tests/anomaly-tester/Android.bp b/tests/anomaly-tester/Android.bp index 0b05e04ffac..d437a6c9de3 100644 --- a/tests/anomaly-tester/Android.bp +++ b/tests/anomaly-tester/Android.bp @@ -1,4 +1,5 @@ package { + default_team: "trendy_team_android_settings_app", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "packages_apps_Settings_license" diff --git a/tests/componenttests/Android.bp b/tests/componenttests/Android.bp index 300a338bd50..48d3ab0af5c 100644 --- a/tests/componenttests/Android.bp +++ b/tests/componenttests/Android.bp @@ -2,6 +2,7 @@ // Settings Component test target. # //############################################################ package { + default_team: "trendy_team_android_settings_app", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "packages_apps_Settings_license" diff --git a/tests/legacy_unit/InstrumentedEntitlementApp/Android.bp b/tests/legacy_unit/InstrumentedEntitlementApp/Android.bp index 1ec108a53bc..cc0e63d00dc 100644 --- a/tests/legacy_unit/InstrumentedEntitlementApp/Android.bp +++ b/tests/legacy_unit/InstrumentedEntitlementApp/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_android_settings_app", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "packages_apps_Settings_license" diff --git a/tests/perftests/Android.bp b/tests/perftests/Android.bp index 7d3b75bb021..7e3a8aa6c75 100644 --- a/tests/perftests/Android.bp +++ b/tests/perftests/Android.bp @@ -1,4 +1,5 @@ package { + default_team: "trendy_team_android_settings_app", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "packages_apps_Settings_license" diff --git a/tests/robotests/Android.bp b/tests/robotests/Android.bp index ad8361e2086..a40c044ff8e 100644 --- a/tests/robotests/Android.bp +++ b/tests/robotests/Android.bp @@ -3,6 +3,7 @@ //############################################################ package { + default_team: "trendy_team_android_settings_app", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "packages_apps_Settings_license" diff --git a/tests/spa_unit/Android.bp b/tests/spa_unit/Android.bp index 0bd561348ef..61f68bd5cf3 100644 --- a/tests/spa_unit/Android.bp +++ b/tests/spa_unit/Android.bp @@ -15,6 +15,7 @@ // package { + default_team: "trendy_team_android_settings_app", default_applicable_licenses: ["packages_apps_Settings_license"], } diff --git a/tests/uitests/Android.bp b/tests/uitests/Android.bp index 5e83dbcd22c..31bfdc2688b 100644 --- a/tests/uitests/Android.bp +++ b/tests/uitests/Android.bp @@ -13,6 +13,7 @@ // limitations under the License. package { + default_team: "trendy_team_android_settings_app", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "packages_apps_Settings_license" diff --git a/tests/unit/Android.bp b/tests/unit/Android.bp index 3ac08427330..b4b79dd3320 100644 --- a/tests/unit/Android.bp +++ b/tests/unit/Android.bp @@ -1,4 +1,5 @@ package { + default_team: "trendy_team_android_settings_app", // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "packages_apps_Settings_license" From ffb6e7e21b236da501588339f6357cdb4b9bd352 Mon Sep 17 00:00:00 2001 From: chengfeitao Date: Tue, 12 Dec 2023 21:30:28 +0000 Subject: [PATCH 3/7] SettingsGoogle: Add ContextualScreenTimeout Store contextual screen timeout preference when the corresponding switch is toggled. Bug: 295232527 Test: atest ExternalSettingsProviderTest Test: atest ContextualTimeoutPreferenceControllerTest Change-Id: I093d180f4b11ebb806c4b1949ff5428520c8f40f --- .../display/DisplayFeatureProvider.java | 39 ++++++++++++++++ .../display/DisplayFeatureProviderImpl.java | 44 +++++++++++++++++++ .../display/ScreenTimeoutSettings.java | 12 +++++ .../settings/overlay/FeatureFactory.kt | 6 +++ .../settings/overlay/FeatureFactoryImpl.kt | 5 +++ .../testutils/FakeFeatureFactory.java | 8 ++++ .../settings/testutils/FakeFeatureFactory.kt | 3 ++ .../testutils/FakeFeatureFactory.java | 8 ++++ 8 files changed, 125 insertions(+) create mode 100644 src/com/android/settings/display/DisplayFeatureProvider.java create mode 100644 src/com/android/settings/display/DisplayFeatureProviderImpl.java diff --git a/src/com/android/settings/display/DisplayFeatureProvider.java b/src/com/android/settings/display/DisplayFeatureProvider.java new file mode 100644 index 00000000000..a7c8dbb71a1 --- /dev/null +++ b/src/com/android/settings/display/DisplayFeatureProvider.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2024 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.display; + +import android.content.Context; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.preference.PreferenceScreen; + +import com.android.settings.core.TogglePreferenceController; + +/** Feature provider for display settings */ +public interface DisplayFeatureProvider { + + /** Create toggle preference */ + @Nullable + TogglePreferenceController createAdditionalPreference(@NonNull Context context); + + /** Update toggle preference */ + void updatePreference(@Nullable TogglePreferenceController togglePreferenceController); + + /** Add toggle preference to PreferenceScreen */ + void addToScreen(@Nullable TogglePreferenceController togglePreferenceController, + @NonNull PreferenceScreen screen); +} diff --git a/src/com/android/settings/display/DisplayFeatureProviderImpl.java b/src/com/android/settings/display/DisplayFeatureProviderImpl.java new file mode 100644 index 00000000000..c9ec791a922 --- /dev/null +++ b/src/com/android/settings/display/DisplayFeatureProviderImpl.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2024 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.display; + +import android.content.Context; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.preference.PreferenceScreen; + +import com.android.settings.core.TogglePreferenceController; + +public class DisplayFeatureProviderImpl implements DisplayFeatureProvider { + + @Override + @Nullable + public TogglePreferenceController createAdditionalPreference(@NonNull Context context) { + return null; + } + + @Override + public void updatePreference(@Nullable TogglePreferenceController togglePreferenceController) { + + } + + @Override + public void addToScreen(@Nullable TogglePreferenceController togglePreferenceController, + @NonNull PreferenceScreen screen) { + + } +} diff --git a/src/com/android/settings/display/ScreenTimeoutSettings.java b/src/com/android/settings/display/ScreenTimeoutSettings.java index 1c99d5f70a8..2d229a3cfe7 100644 --- a/src/com/android/settings/display/ScreenTimeoutSettings.java +++ b/src/com/android/settings/display/ScreenTimeoutSettings.java @@ -34,9 +34,11 @@ import android.os.UserHandle; import android.provider.Settings; import android.util.Log; +import androidx.annotation.Nullable; import androidx.preference.PreferenceScreen; import com.android.settings.R; +import com.android.settings.core.TogglePreferenceController; import com.android.settings.flags.Flags; import com.android.settings.overlay.FeatureFactory; import com.android.settings.search.BaseSearchIndexProvider; @@ -106,6 +108,9 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment @VisibleForTesting AdaptiveSleepBatterySaverPreferenceController mAdaptiveSleepBatterySaverPreferenceController; + @Nullable + TogglePreferenceController mAdditionalTogglePreferenceController; + public ScreenTimeoutSettings() { super(); mMetricsFeatureProvider = FeatureFactory.getFeatureFactory().getMetricsFeatureProvider(); @@ -133,6 +138,8 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment com.android.settingslib.widget.preference.footer.R.layout.preference_footer); mPrivacyManager = SensorPrivacyManager.getInstance(context); mPrivacyChangedListener = (sensor, enabled) -> mAdaptiveSleepController.updatePreference(); + mAdditionalTogglePreferenceController = FeatureFactory.getFeatureFactory() + .getDisplayFeatureProvider().createAdditionalPreference(context); } @Override @@ -164,6 +171,8 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment mReceiver, new IntentFilter(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED)); mPrivacyManager.addSensorPrivacyListener(CAMERA, mPrivacyChangedListener); mIsUserAuthenticated = false; + FeatureFactory.getFeatureFactory().getDisplayFeatureProvider().updatePreference( + mAdditionalTogglePreferenceController); } @Override @@ -210,6 +219,9 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment mPrivacyPreference.setLayoutResource( com.android.settingslib.widget.preference.footer.R.layout.preference_footer); + FeatureFactory.getFeatureFactory().getDisplayFeatureProvider() + .addToScreen(mAdditionalTogglePreferenceController, screen); + if (isScreenAttentionAvailable(getContext())) { mAdaptiveSleepPermissionController.addToScreen(screen); mAdaptiveSleepCameraStatePreferenceController.addToScreen(screen); diff --git a/src/com/android/settings/overlay/FeatureFactory.kt b/src/com/android/settings/overlay/FeatureFactory.kt index 8a68122361b..37507a82274 100644 --- a/src/com/android/settings/overlay/FeatureFactory.kt +++ b/src/com/android/settings/overlay/FeatureFactory.kt @@ -29,6 +29,7 @@ import com.android.settings.connecteddevice.stylus.StylusFeatureProvider import com.android.settings.dashboard.DashboardFeatureProvider import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProvider +import com.android.settings.display.DisplayFeatureProvider import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider import com.android.settings.fuelgauge.BatterySettingsFeatureProvider import com.android.settings.fuelgauge.BatteryStatusFeatureProvider @@ -176,6 +177,11 @@ abstract class FeatureFactory { */ abstract val privateSpaceLoginFeatureProvider: PrivateSpaceLoginFeatureProvider + /** + * Gets implementation for Display feature. + */ + abstract val displayFeatureProvider: DisplayFeatureProvider + companion object { private var _factory: FeatureFactory? = null diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.kt b/src/com/android/settings/overlay/FeatureFactoryImpl.kt index 28dbb23b245..e0313b7b7f1 100644 --- a/src/com/android/settings/overlay/FeatureFactoryImpl.kt +++ b/src/com/android/settings/overlay/FeatureFactoryImpl.kt @@ -45,6 +45,8 @@ import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProvider import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProviderImpl +import com.android.settings.display.DisplayFeatureProvider +import com.android.settings.display.DisplayFeatureProviderImpl import com.android.settings.enterprise.EnterprisePrivacyFeatureProviderImpl import com.android.settings.fuelgauge.BatterySettingsFeatureProviderImpl import com.android.settings.fuelgauge.BatteryStatusFeatureProviderImpl @@ -190,4 +192,7 @@ open class FeatureFactoryImpl : FeatureFactory() { override val privateSpaceLoginFeatureProvider: PrivateSpaceLoginFeatureProvider by lazy { PrivateSpaceLoginFeatureProviderImpl() } + override val displayFeatureProvider: DisplayFeatureProvider by lazy { + DisplayFeatureProviderImpl() + } } diff --git a/tests/robotests/testutils/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/testutils/com/android/settings/testutils/FakeFeatureFactory.java index 5a5008c26bf..a11b226db28 100644 --- a/tests/robotests/testutils/com/android/settings/testutils/FakeFeatureFactory.java +++ b/tests/robotests/testutils/com/android/settings/testutils/FakeFeatureFactory.java @@ -33,6 +33,7 @@ import com.android.settings.dashboard.DashboardFeatureProvider; import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider; import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProvider; import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProviderImpl; +import com.android.settings.display.DisplayFeatureProvider; import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider; import com.android.settings.fuelgauge.BatterySettingsFeatureProvider; import com.android.settings.fuelgauge.BatteryStatusFeatureProvider; @@ -101,6 +102,7 @@ public class FakeFeatureFactory extends FeatureFactory { public OnboardingFeatureProvider mOnboardingFeatureProvider; public FastPairFeatureProvider mFastPairFeatureProvider; public PrivateSpaceLoginFeatureProvider mPrivateSpaceLoginFeatureProvider; + public DisplayFeatureProvider mDisplayFeatureProvider; /** * Call this in {@code @Before} method of the test class to use fake factory. @@ -149,6 +151,7 @@ public class FakeFeatureFactory extends FeatureFactory { mOnboardingFeatureProvider = mock(OnboardingFeatureProvider.class); mFastPairFeatureProvider = mock(FastPairFeatureProvider.class); mPrivateSpaceLoginFeatureProvider = mock(PrivateSpaceLoginFeatureProvider.class); + mDisplayFeatureProvider = mock(DisplayFeatureProvider.class); } @Override @@ -331,5 +334,10 @@ public class FakeFeatureFactory extends FeatureFactory { public PrivateSpaceLoginFeatureProvider getPrivateSpaceLoginFeatureProvider() { return mPrivateSpaceLoginFeatureProvider; } + + @Override + public DisplayFeatureProvider getDisplayFeatureProvider() { + return mDisplayFeatureProvider; + } } diff --git a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt index 9b098a7e5ca..4048c24754d 100644 --- a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt +++ b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt @@ -30,6 +30,7 @@ import com.android.settings.connecteddevice.stylus.StylusFeatureProvider import com.android.settings.dashboard.DashboardFeatureProvider import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProvider +import com.android.settings.display.DisplayFeatureProvider import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider import com.android.settings.fuelgauge.BatterySettingsFeatureProvider import com.android.settings.fuelgauge.BatteryStatusFeatureProvider @@ -146,4 +147,6 @@ class FakeFeatureFactory : FeatureFactory() { get() = TODO("Not yet implemented") override val privateSpaceLoginFeatureProvider: PrivateSpaceLoginFeatureProvider get() = TODO("Not yet implemented") + override val displayFeatureProvider: DisplayFeatureProvider + get() = TODO("Not yet implemented") } diff --git a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java index 6c4c5b4eae7..9e7948c7da8 100644 --- a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java +++ b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java @@ -33,6 +33,7 @@ import com.android.settings.dashboard.DashboardFeatureProvider; import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider; import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProvider; import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProviderImpl; +import com.android.settings.display.DisplayFeatureProvider; import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider; import com.android.settings.fuelgauge.BatterySettingsFeatureProvider; import com.android.settings.fuelgauge.BatteryStatusFeatureProvider; @@ -100,6 +101,7 @@ public class FakeFeatureFactory extends FeatureFactory { public OnboardingFeatureProvider mOnboardingFeatureProvider; public FastPairFeatureProvider mFastPairFeatureProvider; public PrivateSpaceLoginFeatureProvider mPrivateSpaceLoginFeatureProvider; + public DisplayFeatureProvider mDisplayFeatureProvider; /** Call this in {@code @Before} method of the test class to use fake factory. */ public static FakeFeatureFactory setupForTest() { @@ -150,6 +152,7 @@ public class FakeFeatureFactory extends FeatureFactory { mOnboardingFeatureProvider = mock(OnboardingFeatureProvider.class); mFastPairFeatureProvider = mock(FastPairFeatureProvider.class); mPrivateSpaceLoginFeatureProvider = mock(PrivateSpaceLoginFeatureProvider.class); + mDisplayFeatureProvider = mock(DisplayFeatureProvider.class); } @Override @@ -332,4 +335,9 @@ public class FakeFeatureFactory extends FeatureFactory { public PrivateSpaceLoginFeatureProvider getPrivateSpaceLoginFeatureProvider() { return mPrivateSpaceLoginFeatureProvider; } + + @Override + public DisplayFeatureProvider getDisplayFeatureProvider() { + return mDisplayFeatureProvider; + } } From 6cca4f32e605cb22adb4b62ae2abac4038815cc9 Mon Sep 17 00:00:00 2001 From: Becca Hughes Date: Mon, 12 Feb 2024 23:29:27 +0000 Subject: [PATCH 4/7] Update "none selected" state to align with mocks: Mocks: https://screenshot.googleplex.com/BYsmSRcRL5dhjve Implementation: https://hsv.googleplex.com/4797150908121088 Change-Id: I47e8f784fa850da4271170d44b3eb770721c3e8b Test: on device & unit Bug: 322074376 --- res/values/dimens.xml | 4 ++ res/values/strings.xml | 2 + .../DefaultCombinedPreferenceController.java | 4 +- .../PrimaryProviderPreference.java | 46 +++++++++---------- .../PrimaryProviderPreferenceTest.java | 45 ++++-------------- 5 files changed, 37 insertions(+), 64 deletions(-) diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 3e0b8d93381..4b96486be7b 100755 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -473,4 +473,8 @@ 1000dp + + + 80dp + 24dp diff --git a/res/values/strings.xml b/res/values/strings.xml index 17569e0958c..836a27f0a5c 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -10802,6 +10802,8 @@ Change Open + + None selected diff --git a/src/com/android/settings/applications/credentials/DefaultCombinedPreferenceController.java b/src/com/android/settings/applications/credentials/DefaultCombinedPreferenceController.java index 49dd7cde221..032402fb157 100644 --- a/src/com/android/settings/applications/credentials/DefaultCombinedPreferenceController.java +++ b/src/com/android/settings/applications/credentials/DefaultCombinedPreferenceController.java @@ -114,7 +114,7 @@ public class DefaultCombinedPreferenceController extends DefaultAppPreferenceCon @Nullable CharSequence packageName, @Nullable CharSequence settingsActivity) { if (appName == null) { - preference.setTitle(R.string.app_list_preference_none); + preference.setTitle(R.string.credman_app_list_preference_none); } else { preference.setTitle(appName); } @@ -144,7 +144,7 @@ public class DefaultCombinedPreferenceController extends DefaultAppPreferenceCon // Hide the open button if there is no defined settings activity. primaryPref.setOpenButtonVisible(!TextUtils.isEmpty(settingsActivity)); - primaryPref.setButtonsVisible(appName != null); + primaryPref.setButtonsCompactMode(appName != null); } } diff --git a/src/com/android/settings/applications/credentials/PrimaryProviderPreference.java b/src/com/android/settings/applications/credentials/PrimaryProviderPreference.java index b8e2529dee7..84459e057ab 100644 --- a/src/com/android/settings/applications/credentials/PrimaryProviderPreference.java +++ b/src/com/android/settings/applications/credentials/PrimaryProviderPreference.java @@ -46,7 +46,7 @@ public class PrimaryProviderPreference extends GearPreference { private @Nullable View mButtonFrameView = null; private @Nullable View mGearView = null; private @Nullable Delegate mDelegate = null; - private boolean mButtonsVisible = false; + private boolean mButtonsCompactMode = false; private boolean mOpenButtonVisible = false; /** Called to send messages back to the parent controller. */ @@ -141,26 +141,7 @@ public class PrimaryProviderPreference extends GearPreference { }); mButtonFrameView = holder.findViewById(R.id.credman_button_frame); - mButtonFrameView.setVisibility(mButtonsVisible ? View.VISIBLE : View.GONE); - - // There is a special case where if the provider == none then we should - // hide the buttons and when the preference is tapped we can open the - // provider selection dialog. - setOnPreferenceClickListener( - new Preference.OnPreferenceClickListener() { - public boolean onPreferenceClick(@NonNull Preference preference) { - return handlePreferenceClickNewSettingsUi(); - } - }); - } - - private boolean handlePreferenceClickNewSettingsUi() { - if (mDelegate != null && !mButtonsVisible) { - mDelegate.onChangeButtonClicked(); - return true; - } - - return false; + updateButtonFramePadding(); } public void setOpenButtonVisible(boolean isVisible) { @@ -172,12 +153,27 @@ public class PrimaryProviderPreference extends GearPreference { mOpenButtonVisible = isVisible; } - public void setButtonsVisible(boolean isVisible) { - if (mButtonFrameView != null) { - setVisibility(mButtonFrameView, isVisible); + private void updateButtonFramePadding() { + if (mButtonFrameView == null) { + return; } - mButtonsVisible = isVisible; + int paddingLeft = mButtonsCompactMode ? + getContext().getResources().getDimensionPixelSize( + R.dimen.credman_primary_provider_pref_left_padding) : + getContext().getResources().getDimensionPixelSize( + R.dimen.credman_primary_provider_pref_left_padding_compact); + + mButtonFrameView.setPadding( + paddingLeft, + mButtonFrameView.getPaddingTop(), + mButtonFrameView.getPaddingRight(), + mButtonFrameView.getPaddingBottom()); + } + + public void setButtonsCompactMode(boolean isCompactMode) { + mButtonsCompactMode = isCompactMode; + updateButtonFramePadding(); } public void setDelegate(@NonNull Delegate delegate) { diff --git a/tests/unit/src/com/android/settings/applications/credentials/PrimaryProviderPreferenceTest.java b/tests/unit/src/com/android/settings/applications/credentials/PrimaryProviderPreferenceTest.java index 51a1fc41e30..9ea16bba1f0 100644 --- a/tests/unit/src/com/android/settings/applications/credentials/PrimaryProviderPreferenceTest.java +++ b/tests/unit/src/com/android/settings/applications/credentials/PrimaryProviderPreferenceTest.java @@ -114,50 +114,21 @@ public class PrimaryProviderPreferenceTest { } @Test - public void ensureButtonsClicksCallDelegate_newDesign_buttonsHidden() { + public void ensureButtonsClicksCallDelegate_newDesign_buttonsCompactMode() { if (!PrimaryProviderPreference.shouldUseNewSettingsUi()) { return; } PrimaryProviderPreference ppp = createTestPreferenceWithNewLayout(); + int initialPaddingLeft = ppp.getButtonFrameView().getPaddingLeft(); - // Test that the buttons are visible. - assertThat(ppp.getButtonFrameView()).isNotNull(); - assertThat(ppp.getButtonFrameView().getVisibility()).isEqualTo(View.GONE); - assertThat(mReceivedChangeButtonClicked).isFalse(); + // If we show the buttons the left padding should be updated. + ppp.setButtonsCompactMode(true); + assertThat(ppp.getButtonFrameView().getPaddingLeft()).isNotEqualTo(initialPaddingLeft); - // If we show the buttons the visiblility should be updated. - ppp.setButtonsVisible(true); - assertThat(ppp.getButtonFrameView().getVisibility()).isEqualTo(View.VISIBLE); - - // If we hide the buttons the visibility should be updated. - ppp.setButtonsVisible(false); - assertThat(ppp.getButtonFrameView().getVisibility()).isEqualTo(View.GONE); - } - - @Test - public void ensureButtonsClicksCallDelegate_oldDesign() { - if (PrimaryProviderPreference.shouldUseNewSettingsUi()) { - return; - } - - PrimaryProviderPreference ppp = createTestPreference("preference_widget_gear"); - - // Test that clicking the preference results in the delegate being - // called. - assertThat(mReceivedOpenButtonClicked).isFalse(); - ppp.getOnPreferenceClickListener().onPreferenceClick(ppp); - assertThat(mReceivedOpenButtonClicked).isTrue(); - - // Test that the gear button is present and visible. - assertThat(ppp.getGearView()).isNotNull(); - assertThat(ppp.getGearView().getVisibility()).isEqualTo(View.VISIBLE); - - // Test that clicking the gear button results in the delegate being - // called. - assertThat(mReceivedChangeButtonClicked).isFalse(); - ppp.getGearView().performClick(); - assertThat(mReceivedChangeButtonClicked).isTrue(); + // If we hide the buttons the left padding should be updated. + ppp.setButtonsCompactMode(false); + assertThat(ppp.getButtonFrameView().getPaddingLeft()).isEqualTo(initialPaddingLeft); } private PrimaryProviderPreference createTestPreferenceWithNewLayout() { From f36829993135c0d6de6abbc29f55fd9057fb269f Mon Sep 17 00:00:00 2001 From: Becca Hughes Date: Fri, 9 Feb 2024 21:08:18 +0000 Subject: [PATCH 5/7] Fix bug where maximum provider limit was not being reflected The limit of 5 providers had two issues, one it did not reserve one slot for primary which meant that you could enable 6 and also even though it wouldn't save and would show an error when you hit that limit the toggle was not reset which made it look like it was enabled. Test: on device + unit Bug: 324426504 Change-Id: Ibec4efd6394835729869194181161fe8ae743e76 --- ...CredentialManagerPreferenceController.java | 37 ++++++++++++++----- ...entialManagerPreferenceControllerTest.java | 31 +++++++++++----- 2 files changed, 49 insertions(+), 19 deletions(-) diff --git a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java index d98bc51c794..be0658e8c64 100644 --- a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java +++ b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java @@ -568,7 +568,7 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl */ @VisibleForTesting public boolean togglePackageNameEnabled(String packageName) { - if (mEnabledPackageNames.size() >= MAX_SELECTABLE_PROVIDERS) { + if (hasProviderLimitBeenReached()) { return false; } else { mEnabledPackageNames.add(packageName); @@ -623,6 +623,19 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl return mIconResizer.createIconThumbnail(providerIcon); } + private boolean hasProviderLimitBeenReached() { + return hasProviderLimitBeenReached(mEnabledPackageNames.size()); + } + + @VisibleForTesting + public static boolean hasProviderLimitBeenReached(int enabledAdditionalProviderCount) { + // If the number of package names has reached the maximum limit then + // we should stop any new packages from being added. We will also + // reserve one place for the primary provider so if the max limit is + // five providers this will be four additional plus the primary. + return (enabledAdditionalProviderCount + 1) >= MAX_SELECTABLE_PROVIDERS; + } + private CombiPreference addProviderPreference( @NonNull Context prefContext, @NonNull CharSequence title, @@ -648,19 +661,18 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl pref.setPreferenceListener( new CombiPreference.OnCombiPreferenceClickListener() { @Override - public void onCheckChanged(CombiPreference p, boolean isChecked) { + public boolean onCheckChanged(CombiPreference p, boolean isChecked) { if (isChecked) { - if (mEnabledPackageNames.size() >= MAX_SELECTABLE_PROVIDERS) { + if (hasProviderLimitBeenReached()) { // Show the error if too many enabled. - pref.setChecked(false); final DialogFragment fragment = newErrorDialogFragment(); if (fragment == null || mFragmentManager == null) { - return; + return false; } fragment.show(mFragmentManager, ErrorDialogFragment.TAG); - return; + return false; } togglePackageNameEnabled(packageName); @@ -672,6 +684,8 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl } else { togglePackageNameDisabled(packageName); } + + return true; } @Override @@ -989,8 +1003,13 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl @Override public void onClick(View buttonView) { // Forward the event. - if (mSwitch != null) { - mOnClickListener.onCheckChanged(CombiPreference.this, mSwitch.isChecked()); + if (mSwitch != null && mOnClickListener != null) { + if (!mOnClickListener.onCheckChanged(CombiPreference.this, mSwitch.isChecked())) { + // The update was not successful since there were too + // many enabled providers to manually reset any state. + mChecked = false; + mSwitch.setChecked(false); + } } } } @@ -1004,7 +1023,7 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl public interface OnCombiPreferenceClickListener { /** Called when the check is updated */ - void onCheckChanged(CombiPreference p, boolean isChecked); + boolean onCheckChanged(CombiPreference p, boolean isChecked); /** Called when the left side is clicked. */ void onLeftSideClicked(); diff --git a/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java b/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java index b5aeac75ff7..0a04a739b53 100644 --- a/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java @@ -217,33 +217,33 @@ public class CredentialManagerPreferenceControllerTest { assertThat(controller.isHiddenDueToNoProviderSet()).isFalse(); assertThat(controller.getAvailabilityStatus()).isEqualTo(AVAILABLE); - // Ensure that we stay under 5 providers. + // Ensure that we stay under 5 providers (one is reserved for primary). assertThat(controller.togglePackageNameEnabled("com.android.provider1")).isTrue(); assertThat(controller.togglePackageNameEnabled("com.android.provider2")).isTrue(); assertThat(controller.togglePackageNameEnabled("com.android.provider3")).isTrue(); assertThat(controller.togglePackageNameEnabled("com.android.provider4")).isTrue(); - assertThat(controller.togglePackageNameEnabled("com.android.provider5")).isTrue(); + assertThat(controller.togglePackageNameEnabled("com.android.provider5")).isFalse(); assertThat(controller.togglePackageNameEnabled("com.android.provider6")).isFalse(); // Check that they are all actually registered. Set enabledProviders = controller.getEnabledProviders(); - assertThat(enabledProviders.size()).isEqualTo(5); + assertThat(enabledProviders.size()).isEqualTo(4); assertThat(enabledProviders.contains("com.android.provider1")).isTrue(); assertThat(enabledProviders.contains("com.android.provider2")).isTrue(); assertThat(enabledProviders.contains("com.android.provider3")).isTrue(); assertThat(enabledProviders.contains("com.android.provider4")).isTrue(); - assertThat(enabledProviders.contains("com.android.provider5")).isTrue(); + assertThat(enabledProviders.contains("com.android.provider5")).isFalse(); assertThat(enabledProviders.contains("com.android.provider6")).isFalse(); // Check that the settings string has the right component names. List enabledServices = controller.getEnabledSettings(); - assertThat(enabledServices.size()).isEqualTo(6); + assertThat(enabledServices.size()).isEqualTo(5); assertThat(enabledServices.contains("com.android.provider1/ClassA")).isTrue(); assertThat(enabledServices.contains("com.android.provider1/ClassB")).isTrue(); assertThat(enabledServices.contains("com.android.provider2/ClassA")).isTrue(); assertThat(enabledServices.contains("com.android.provider3/ClassA")).isTrue(); assertThat(enabledServices.contains("com.android.provider4/ClassA")).isTrue(); - assertThat(enabledServices.contains("com.android.provider5/ClassA")).isTrue(); + assertThat(enabledServices.contains("com.android.provider5/ClassA")).isFalse(); assertThat(enabledServices.contains("com.android.provider6/ClassA")).isFalse(); // Toggle the provider disabled. @@ -251,22 +251,22 @@ public class CredentialManagerPreferenceControllerTest { // Check that the provider was removed from the list of providers. Set currentlyEnabledProviders = controller.getEnabledProviders(); - assertThat(currentlyEnabledProviders.size()).isEqualTo(4); + assertThat(currentlyEnabledProviders.size()).isEqualTo(3); assertThat(currentlyEnabledProviders.contains("com.android.provider1")).isTrue(); assertThat(currentlyEnabledProviders.contains("com.android.provider2")).isFalse(); assertThat(currentlyEnabledProviders.contains("com.android.provider3")).isTrue(); assertThat(currentlyEnabledProviders.contains("com.android.provider4")).isTrue(); - assertThat(currentlyEnabledProviders.contains("com.android.provider5")).isTrue(); + assertThat(currentlyEnabledProviders.contains("com.android.provider5")).isFalse(); assertThat(currentlyEnabledProviders.contains("com.android.provider6")).isFalse(); // Check that the provider was removed from the list of services stored in the setting. List currentlyEnabledServices = controller.getEnabledSettings(); - assertThat(currentlyEnabledServices.size()).isEqualTo(5); + assertThat(currentlyEnabledServices.size()).isEqualTo(4); assertThat(currentlyEnabledServices.contains("com.android.provider1/ClassA")).isTrue(); assertThat(currentlyEnabledServices.contains("com.android.provider1/ClassB")).isTrue(); assertThat(currentlyEnabledServices.contains("com.android.provider3/ClassA")).isTrue(); assertThat(currentlyEnabledServices.contains("com.android.provider4/ClassA")).isTrue(); - assertThat(currentlyEnabledServices.contains("com.android.provider5/ClassA")).isTrue(); + assertThat(currentlyEnabledServices.contains("com.android.provider5/ClassA")).isFalse(); assertThat(currentlyEnabledServices.contains("com.android.provider6/ClassA")).isFalse(); } @@ -528,6 +528,17 @@ public class CredentialManagerPreferenceControllerTest { assertThat(thumbnail.getIntrinsicWidth()).isEqualTo(getIconSize()); } + @Test + public void testProviderLimitReached() { + // The limit is 5 with one slot reserved for primary. + assertThat(CredentialManagerPreferenceController.hasProviderLimitBeenReached(0)).isFalse(); + assertThat(CredentialManagerPreferenceController.hasProviderLimitBeenReached(1)).isFalse(); + assertThat(CredentialManagerPreferenceController.hasProviderLimitBeenReached(2)).isFalse(); + assertThat(CredentialManagerPreferenceController.hasProviderLimitBeenReached(3)).isFalse(); + assertThat(CredentialManagerPreferenceController.hasProviderLimitBeenReached(4)).isTrue(); + assertThat(CredentialManagerPreferenceController.hasProviderLimitBeenReached(5)).isTrue(); + } + private int getIconSize() { final Resources resources = mContext.getResources(); return (int) resources.getDimension(android.R.dimen.app_icon_size); From 7ff2ab0df1888f5be27a8774a36f47701dc800c3 Mon Sep 17 00:00:00 2001 From: josephpv Date: Tue, 13 Feb 2024 15:01:41 +0000 Subject: [PATCH 6/7] Update with latest icon in private space setup flow screens Screenshots: go/ss/9gaHk7iCpTVxi9S.png go/ss/4s6vqq3RTvExK6b.png go/ss/7uhBhrtU69E4SKv.png go/ss/A3B98AiPBWPXtNA.png Bug: 325043422 Test: Manual Change-Id: I37b0707617287745239517a3113ef248f721c3f8 --- res/drawable/ic_private_space_icon.xml | 26 +++++++++++++++++++ res/drawable/ic_privatespace_icon.xml | 27 -------------------- res/layout/privatespace_advancing_screen.xml | 2 +- res/layout/privatespace_education_screen.xml | 2 +- 4 files changed, 28 insertions(+), 29 deletions(-) create mode 100644 res/drawable/ic_private_space_icon.xml delete mode 100644 res/drawable/ic_privatespace_icon.xml diff --git a/res/drawable/ic_private_space_icon.xml b/res/drawable/ic_private_space_icon.xml new file mode 100644 index 00000000000..fc0894d1fe0 --- /dev/null +++ b/res/drawable/ic_private_space_icon.xml @@ -0,0 +1,26 @@ + + + + + diff --git a/res/drawable/ic_privatespace_icon.xml b/res/drawable/ic_privatespace_icon.xml deleted file mode 100644 index b651f5235e0..00000000000 --- a/res/drawable/ic_privatespace_icon.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - diff --git a/res/layout/privatespace_advancing_screen.xml b/res/layout/privatespace_advancing_screen.xml index 3a85b160222..bce37a6c855 100644 --- a/res/layout/privatespace_advancing_screen.xml +++ b/res/layout/privatespace_advancing_screen.xml @@ -20,7 +20,7 @@ android:id="@+id/private_space_autoadvance_screen" android:layout_width="match_parent" android:layout_height="match_parent" - android:icon="@drawable/ic_privatespace_icon"> + android:icon="@drawable/ic_private_space_icon"> + android:icon="@drawable/ic_private_space_icon"> Date: Wed, 7 Feb 2024 12:00:39 +0000 Subject: [PATCH 7/7] Add illustration to final screen in PS setup and update existing illustrations. Screenshots: - go/ss/9KhqUSezFKHnyys.png Recording link: - b/321694009#comment2 Bug: 323156268 Bug: 321694009 Test: Verified manually Change-Id: Ib8abc080f31cad0a9be3b73a1694be744c108a06 --- ...private_space_choose_lock_illustration.xml | 84 +++++++++++++++ res/drawable/private_space_illustration.xml | 82 ++++++++++++++ ..._space_setup_notification_illustration.xml | 65 ++++++++++++ ..._space_setup_preinstalled_illustration.xml | 77 ++++++++++++++ ...ivate_space_setup_sharing_illustration.xml | 100 ++++++++++++++++++ .../privatespace_lock_placeholder.xml | 78 -------------- .../privatespace_setup_flow_placeholder.xml | 48 --------- ...xml => private_space_advancing_screen.xml} | 4 +- ...xml => private_space_education_screen.xml} | 4 +- ...n.xml => private_space_setlock_screen.xml} | 2 +- ...ss.xml => private_space_setup_success.xml} | 9 ++ res/xml/private_space_settings.xml | 4 +- .../AutoAdvanceSetupFragment.java | 14 +-- .../privatespace/PrivateSpaceEducation.java | 2 +- .../PrivateSpaceSetLockFragment.java | 2 +- .../privatespace/SetupSuccessFragment.java | 2 +- 16 files changed, 434 insertions(+), 143 deletions(-) create mode 100644 res/drawable/private_space_choose_lock_illustration.xml create mode 100644 res/drawable/private_space_illustration.xml create mode 100644 res/drawable/private_space_setup_notification_illustration.xml create mode 100644 res/drawable/private_space_setup_preinstalled_illustration.xml create mode 100644 res/drawable/private_space_setup_sharing_illustration.xml delete mode 100644 res/drawable/privatespace_lock_placeholder.xml delete mode 100644 res/drawable/privatespace_setup_flow_placeholder.xml rename res/layout/{privatespace_advancing_screen.xml => private_space_advancing_screen.xml} (93%) rename res/layout/{privatespace_education_screen.xml => private_space_education_screen.xml} (97%) rename res/layout/{privatespace_setlock_screen.xml => private_space_setlock_screen.xml} (93%) rename res/layout/{privatespace_setup_success.xml => private_space_setup_success.xml} (79%) diff --git a/res/drawable/private_space_choose_lock_illustration.xml b/res/drawable/private_space_choose_lock_illustration.xml new file mode 100644 index 00000000000..f943cb8229d --- /dev/null +++ b/res/drawable/private_space_choose_lock_illustration.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/drawable/private_space_illustration.xml b/res/drawable/private_space_illustration.xml new file mode 100644 index 00000000000..7f2dba873bc --- /dev/null +++ b/res/drawable/private_space_illustration.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/drawable/private_space_setup_notification_illustration.xml b/res/drawable/private_space_setup_notification_illustration.xml new file mode 100644 index 00000000000..ecdb486aa8a --- /dev/null +++ b/res/drawable/private_space_setup_notification_illustration.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/res/drawable/private_space_setup_preinstalled_illustration.xml b/res/drawable/private_space_setup_preinstalled_illustration.xml new file mode 100644 index 00000000000..2f01f01c8af --- /dev/null +++ b/res/drawable/private_space_setup_preinstalled_illustration.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/drawable/private_space_setup_sharing_illustration.xml b/res/drawable/private_space_setup_sharing_illustration.xml new file mode 100644 index 00000000000..8cfa77f7af7 --- /dev/null +++ b/res/drawable/private_space_setup_sharing_illustration.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/drawable/privatespace_lock_placeholder.xml b/res/drawable/privatespace_lock_placeholder.xml deleted file mode 100644 index 815ffd70d60..00000000000 --- a/res/drawable/privatespace_lock_placeholder.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/res/drawable/privatespace_setup_flow_placeholder.xml b/res/drawable/privatespace_setup_flow_placeholder.xml deleted file mode 100644 index a4ff1252502..00000000000 --- a/res/drawable/privatespace_setup_flow_placeholder.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/res/layout/privatespace_advancing_screen.xml b/res/layout/private_space_advancing_screen.xml similarity index 93% rename from res/layout/privatespace_advancing_screen.xml rename to res/layout/private_space_advancing_screen.xml index bce37a6c855..35d6462651f 100644 --- a/res/layout/privatespace_advancing_screen.xml +++ b/res/layout/private_space_advancing_screen.xml @@ -26,12 +26,12 @@ android:layout_height="match_parent" android:orientation="vertical"> + android:src="@null"/> + android:src="@drawable/private_space_illustration"/> diff --git a/res/layout/privatespace_setlock_screen.xml b/res/layout/private_space_setlock_screen.xml similarity index 93% rename from res/layout/privatespace_setlock_screen.xml rename to res/layout/private_space_setlock_screen.xml index 72119484ac3..64a2ff2339e 100644 --- a/res/layout/privatespace_setlock_screen.xml +++ b/res/layout/private_space_setlock_screen.xml @@ -37,7 +37,7 @@ android:layout_height="match_parent" android:scaleType="fitCenter" android:contentDescription="@null" - android:src="@drawable/privatespace_lock_placeholder"/> + android:src="@drawable/private_space_choose_lock_illustration"/> \ No newline at end of file diff --git a/res/layout/privatespace_setup_success.xml b/res/layout/private_space_setup_success.xml similarity index 79% rename from res/layout/privatespace_setup_success.xml rename to res/layout/private_space_setup_success.xml index e3e6b683698..759373f8267 100644 --- a/res/layout/privatespace_setup_success.xml +++ b/res/layout/private_space_setup_success.xml @@ -24,4 +24,13 @@ app:sucHeaderText="@string/private_space_success_title" app:sudDescriptionText="@string/private_space_access_text" android:icon="@drawable/ic_privatespace_done"> + + + diff --git a/res/xml/private_space_settings.xml b/res/xml/private_space_settings.xml index a3dfbf22906..0ed9c93fb84 100644 --- a/res/xml/private_space_settings.xml +++ b/res/xml/private_space_settings.xml @@ -23,9 +23,9 @@ settings:searchable="false"> + settings:lottie_rawRes="@drawable/private_space_illustration"/> > HEADER_IMAGE_PAIRS = ImmutableList.of( new Pair(R.string.private_space_notifications_hidden_title, - R.drawable.privatespace_setup_flow_placeholder), + R.drawable.private_space_setup_notification_illustration), new Pair(R.string.private_space_share_photos_title, - R.drawable.privatespace_setup_flow_placeholder), + R.drawable.private_space_setup_sharing_illustration), new Pair(R.string.private_space_apps_installed_title, - R.drawable.privatespace_setup_flow_placeholder)); + R.drawable.private_space_setup_preinstalled_illustration)); private Runnable mUpdateScreenResources = new Runnable() { @@ -116,7 +116,7 @@ public class AutoAdvanceSetupFragment extends InstrumentedFragment { } mRootView = (GlifLayout) - inflater.inflate(R.layout.privatespace_advancing_screen, container, false); + inflater.inflate(R.layout.private_space_advancing_screen, container, false); mRootView.getHeaderTextView().setMaxLines(HEADER_TEXT_MAX_LINES); updateHeaderAndImage(); mHandler = new Handler(Looper.getMainLooper()); @@ -157,7 +157,7 @@ public class AutoAdvanceSetupFragment extends InstrumentedFragment { private void updateHeaderAndImage() { mRootView.setHeaderText(HEADER_IMAGE_PAIRS.get(mScreenTitleIndex).first); - ((ImageView) mRootView.findViewById(R.id.placeholder_image)) + ((ImageView) mRootView.findViewById(R.id.setup_advance_image)) .setImageResource(HEADER_IMAGE_PAIRS.get(mScreenTitleIndex).second); startFadeInAnimation(); } @@ -166,7 +166,7 @@ public class AutoAdvanceSetupFragment extends InstrumentedFragment { ValueAnimator textView = ObjectAnimator.ofFloat( mRootView.getHeaderTextView(), View.ALPHA, 0f, 1f); ValueAnimator imageView = ObjectAnimator.ofFloat( - mRootView.findViewById(R.id.placeholder_image), View.ALPHA, 0, 1f); + mRootView.findViewById(R.id.setup_advance_image), View.ALPHA, 0, 1f); AnimatorSet fadeIn = new AnimatorSet(); fadeIn.playTogether(textView, imageView); fadeIn.setDuration(ANIMATION_DURATION_MILLIS).start(); @@ -177,7 +177,7 @@ public class AutoAdvanceSetupFragment extends InstrumentedFragment { ValueAnimator textView = ObjectAnimator.ofFloat( mRootView.getHeaderTextView(), View.ALPHA, 1f, 0f); ValueAnimator imageView = ObjectAnimator.ofFloat( - mRootView.findViewById(R.id.placeholder_image), View.ALPHA, 1f, 0f); + mRootView.findViewById(R.id.setup_advance_image), View.ALPHA, 1f, 0f); fadeOut.playTogether(textView, imageView); fadeOut.setDuration(ANIMATION_DURATION_MILLIS).start(); fadeOut.addListener(new AnimatorListenerAdapter() { diff --git a/src/com/android/settings/privatespace/PrivateSpaceEducation.java b/src/com/android/settings/privatespace/PrivateSpaceEducation.java index e54982b344c..7b06f5b9ded 100644 --- a/src/com/android/settings/privatespace/PrivateSpaceEducation.java +++ b/src/com/android/settings/privatespace/PrivateSpaceEducation.java @@ -48,7 +48,7 @@ public class PrivateSpaceEducation extends InstrumentedFragment { } GlifLayout rootView = (GlifLayout) - inflater.inflate(R.layout.privatespace_education_screen, container, false); + inflater.inflate(R.layout.private_space_education_screen, container, false); final FooterBarMixin mixin = rootView.getMixin(FooterBarMixin.class); mixin.setPrimaryButton( new FooterButton.Builder(getContext()) diff --git a/src/com/android/settings/privatespace/PrivateSpaceSetLockFragment.java b/src/com/android/settings/privatespace/PrivateSpaceSetLockFragment.java index 9e2e5cce03e..56add6d807e 100644 --- a/src/com/android/settings/privatespace/PrivateSpaceSetLockFragment.java +++ b/src/com/android/settings/privatespace/PrivateSpaceSetLockFragment.java @@ -56,7 +56,7 @@ public class PrivateSpaceSetLockFragment extends InstrumentedFragment { } GlifLayout rootView = (GlifLayout) - inflater.inflate(R.layout.privatespace_setlock_screen, container, false); + inflater.inflate(R.layout.private_space_setlock_screen, container, false); final FooterBarMixin mixin = rootView.getMixin(FooterBarMixin.class); mixin.setPrimaryButton( new FooterButton.Builder(getContext()) diff --git a/src/com/android/settings/privatespace/SetupSuccessFragment.java b/src/com/android/settings/privatespace/SetupSuccessFragment.java index b1e0edcc3f7..13de1fc94fc 100644 --- a/src/com/android/settings/privatespace/SetupSuccessFragment.java +++ b/src/com/android/settings/privatespace/SetupSuccessFragment.java @@ -52,7 +52,7 @@ public class SetupSuccessFragment extends InstrumentedFragment { } GlifLayout rootView = (GlifLayout) - inflater.inflate(R.layout.privatespace_setup_success, container, false); + inflater.inflate(R.layout.private_space_setup_success, container, false); final FooterBarMixin mixin = rootView.getMixin(FooterBarMixin.class); mixin.setPrimaryButton( new FooterButton.Builder(getContext())