Snap for 11697857 from 357c795cea to 24Q3-release
Change-Id: I8c33b679805d96a8a94b440307ab42e4a764ddd6
This commit is contained in:
@@ -2737,10 +2737,18 @@
|
||||
<activity android:name=".biometrics.fingerprint.FingerprintSettings"
|
||||
android:exported="false"
|
||||
android:taskAffinity="com.android.settings.root" />
|
||||
<activity android:name=".biometrics.fingerprint.FingerprintEnrollFindSensor" android:exported="false"/>
|
||||
<activity android:name=".biometrics.fingerprint.FingerprintEnrollEnrolling" android:exported="false"/>
|
||||
<activity android:name=".biometrics.fingerprint.FingerprintEnrollFinish" android:exported="false"/>
|
||||
<activity android:name=".biometrics.fingerprint.FingerprintEnrollParentalConsent" android:exported="false"/>
|
||||
<activity android:name=".biometrics.fingerprint.FingerprintEnrollFindSensor"
|
||||
android:exported="false"
|
||||
android:theme="@style/GlifTheme.Light"/>
|
||||
<activity android:name=".biometrics.fingerprint.FingerprintEnrollEnrolling"
|
||||
android:exported="false"
|
||||
android:theme="@style/GlifTheme.Light"/>
|
||||
<activity android:name=".biometrics.fingerprint.FingerprintEnrollFinish"
|
||||
android:exported="false"
|
||||
android:theme="@style/GlifTheme.Light"/>
|
||||
<activity android:name=".biometrics.fingerprint.FingerprintEnrollParentalConsent"
|
||||
android:exported="false"
|
||||
android:theme="@style/GlifTheme.Light"/>
|
||||
<activity android:name=".biometrics.fingerprint.FingerprintEnrollIntroduction"
|
||||
android:exported="true"
|
||||
android:theme="@style/GlifTheme.Light">
|
||||
@@ -2770,9 +2778,15 @@
|
||||
android:theme="@style/GlifTheme.Light"
|
||||
android:taskAffinity="com.android.settings.root" />
|
||||
|
||||
<activity android:name=".biometrics.fingerprint.SetupFingerprintEnrollFindSensor" android:exported="false"/>
|
||||
<activity android:name=".biometrics.fingerprint.SetupFingerprintEnrollEnrolling" android:exported="false"/>
|
||||
<activity android:name=".biometrics.fingerprint.SetupFingerprintEnrollFinish" android:exported="false"/>
|
||||
<activity android:name=".biometrics.fingerprint.SetupFingerprintEnrollFindSensor"
|
||||
android:exported="false"
|
||||
android:theme="@style/GlifTheme.Light"/>
|
||||
<activity android:name=".biometrics.fingerprint.SetupFingerprintEnrollEnrolling"
|
||||
android:exported="false"
|
||||
android:theme="@style/GlifTheme.Light"/>
|
||||
<activity android:name=".biometrics.fingerprint.SetupFingerprintEnrollFinish"
|
||||
android:exported="false"
|
||||
android:theme="@style/GlifTheme.Light"/>
|
||||
<activity android:name=".biometrics.fingerprint.SetupFingerprintEnrollIntroduction"
|
||||
android:exported="true"
|
||||
android:permission="android.permission.MANAGE_FINGERPRINT"
|
||||
|
||||
@@ -17,10 +17,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M5,3H19C20.1,3 21,3.9 21,5V19C21,20.1 20.1,21 19,21H5C3.9,21 3,20.1 3,19V5C3,3.9 3.9,3 5,3ZM13.5,15.501L12.93,12.271C13.57,11.941 14,11.271 14,10.501C14,9.401 13.1,8.501 12,8.501C10.9,8.501 10,9.401 10,10.501C10,11.271 10.43,11.941 11.07,12.271L10.5,15.501H13.5Z"
|
||||
android:fillColor="?android:attr/colorAccent"
|
||||
android:fillType="evenOdd"/>
|
||||
android:viewportWidth="960"
|
||||
android:viewportHeight="960"
|
||||
android:tint="?android:attr/colorAccent">
|
||||
<path
|
||||
android:fillColor="?android:attr/colorAccent"
|
||||
android:pathData="M480,440Q455,440 437.5,422.5Q420,405 420,380Q420,355 437.5,337.5Q455,320 480,320Q505,320 522.5,337.5Q540,355 540,380Q540,405 522.5,422.5Q505,440 480,440ZM480,880Q341,845 250.5,720.5Q160,596 160,444L160,200L480,80L800,200L800,444Q800,596 709.5,720.5Q619,845 480,880ZM440,720L520,720L520,680L600,680L600,600L520,600L520,514Q564,501 592,464.5Q620,428 620,380Q620,322 579,281Q538,240 480,240Q422,240 381,281Q340,322 340,380Q340,428 368,464.5Q396,501 440,514L440,720Z"/>
|
||||
</vector>
|
||||
|
||||
@@ -71,8 +71,8 @@
|
||||
|
||||
<com.android.internal.widget.LockPatternView
|
||||
android:id="@+id/lockPattern"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="@dimen/biometric_auth_pattern_view_size"
|
||||
android:layout_height="@dimen/biometric_auth_pattern_view_size"
|
||||
android:layout_gravity="center" />
|
||||
|
||||
</com.google.android.setupdesign.view.FillContentLayout>
|
||||
|
||||
@@ -45,8 +45,8 @@
|
||||
|
||||
<com.android.internal.widget.LockPatternView
|
||||
android:id="@+id/lockPattern"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="@dimen/biometric_auth_pattern_view_size"
|
||||
android:layout_height="@dimen/biometric_auth_pattern_view_size"
|
||||
android:layout_gravity="center" />
|
||||
|
||||
</com.google.android.setupdesign.view.FillContentLayout>
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
<!--
|
||||
~ Copyright (C) 2023 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.
|
||||
-->
|
||||
|
||||
<com.google.android.setupdesign.GlifLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/private_space_autoadvance_screen"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:icon="@drawable/ic_private_space_icon">
|
||||
<LinearLayout style="@style/SudContentFrame"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
<com.airbnb.lottie.LottieAnimationView
|
||||
android:id="@+id/lottie_animation"
|
||||
style="@style/SudContentIllustration"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
app:lottie_rawRes="@null"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/createMessage"
|
||||
style="@style/PrivateSpaceSetupTextFontStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="14sp"
|
||||
android:text="@string/private_space_setting_up_text"
|
||||
android:layout_marginBottom="24dp"/>
|
||||
|
||||
</LinearLayout>
|
||||
</com.google.android.setupdesign.GlifLayout>
|
||||
@@ -25,6 +25,6 @@
|
||||
android:icon="@drawable/ic_delete_accent"
|
||||
app:sudUsePartnerHeavyTheme="true"
|
||||
app:sudIllustrationType="default"
|
||||
app:sudDescriptionText = "@string/private_space_confirm_deletion_summary"
|
||||
app:sudDescriptionText = "@string/private_space_few_moments_text"
|
||||
app:sucHeaderText="@string/private_space_confirm_deletion_header">
|
||||
</com.google.android.setupdesign.GlifLoadingLayout>
|
||||
30
res/layout/private_space_create_screen.xml
Normal file
30
res/layout/private_space_create_screen.xml
Normal file
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<com.google.android.setupdesign.GlifLoadingLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/private_space_create_screen"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:icon="@drawable/ic_private_space_icon"
|
||||
app:sudUsePartnerHeavyTheme="true"
|
||||
app:sudIllustrationType="default"
|
||||
app:sudDescriptionText = "@string/private_space_few_moments_text"
|
||||
app:sucHeaderText="@string/private_space_setting_up_text">
|
||||
</com.google.android.setupdesign.GlifLoadingLayout>
|
||||
@@ -23,14 +23,14 @@
|
||||
android:name="com.android.settings.privatespace.PrivateSpaceEducation"
|
||||
android:label="fragment_ps_education">
|
||||
<action
|
||||
android:id="@+id/action_education_to_auto_advance"
|
||||
app:destination="@id/ps_auto_advance_fragment"/>
|
||||
android:id="@+id/action_education_to_create"
|
||||
app:destination="@id/ps_create_fragment"/>
|
||||
</fragment>
|
||||
<fragment android:id="@+id/ps_auto_advance_fragment"
|
||||
android:name="com.android.settings.privatespace.AutoAdvanceSetupFragment"
|
||||
android:label="fragment_ps_auto_advance">
|
||||
<fragment android:id="@+id/ps_create_fragment"
|
||||
android:name="com.android.settings.privatespace.PrivateSpaceCreationFragment"
|
||||
android:label="fragment_ps_create">
|
||||
<action
|
||||
android:id="@+id/action_advance_profile_error"
|
||||
android:id="@+id/action_create_profile_error"
|
||||
app:destination="@id/ps_profile_error_fragment"/>
|
||||
<action
|
||||
android:id="@+id/action_set_lock_fragment"
|
||||
@@ -44,7 +44,7 @@
|
||||
android:label="fragment_ps_error">
|
||||
<action
|
||||
android:id="@+id/action_retry_profile_creation"
|
||||
app:destination="@id/ps_auto_advance_fragment"/>
|
||||
app:destination="@id/ps_create_fragment"/>
|
||||
</fragment>
|
||||
<fragment android:id="@+id/ps_pre_finish_delay_fragment"
|
||||
android:name="com.android.settings.privatespace.SetupPreFinishDelayFragment"
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1295,8 +1295,6 @@
|
||||
<string name="private_space_delete_button_label">Delete</string>
|
||||
<!-- Title for the private space delete confirmation page. [CHAR LIMIT=40] -->
|
||||
<string name="private_space_confirm_deletion_header">Deleting private space\u2026</string>
|
||||
<!-- Description for private space delete confirmation page that mentions it will take a few moments. [CHAR LIMIT=40] -->
|
||||
<string name="private_space_confirm_deletion_summary">This will take a few moments</string>
|
||||
<!-- Toast to show when the private space was deleted. [CHAR LIMIT=NONE] -->
|
||||
<string name="private_space_deleted">Private space deleted</string>
|
||||
<!-- Toast to show when the private space could not be deleted. [CHAR LIMIT=NONE] -->
|
||||
@@ -1332,14 +1330,10 @@
|
||||
<!-- Private space footer link content description [CHAR LIMIT=40] -->
|
||||
<string name="private_space_learn_more_text">Learn more about private space</string>
|
||||
<string name="private_space_learn_more_url" translatable="false">https://support.google.com/android?p=private_space</string>
|
||||
<!-- Text shown at the bottom in private space auto advancing screens. [CHAR LIMIT=60] -->
|
||||
<!-- Description for private space loading page that mentions it will take a few moments. [CHAR LIMIT=40] -->
|
||||
<string name="private_space_few_moments_text">This will take a few moments</string>
|
||||
<!-- Title shown in private space creation screen. [CHAR LIMIT=60] -->
|
||||
<string name="private_space_setting_up_text">Setting up private space\u2026</string>
|
||||
<!-- Title for private space setup in auto advancing screen informing private space notifications are hidden when locked. [CHAR LIMIT=NONE] -->
|
||||
<string name="private_space_notifications_hidden_title">Notifications from private space apps are hidden when it\u2019s locked</string>
|
||||
<!-- Title for private space setup in auto advancing screen informing to explore private space settings for hide and auto lock. [CHAR LIMIT=NONE] -->
|
||||
<string name="private_space_explore_settings_title">Explore private space settings to hide private space and set up automatic locking</string>
|
||||
<!-- Title for private space setup in auto advancing screen informing some system apps are already installed in private space. [CHAR LIMIT=NONE] -->
|
||||
<string name="private_space_apps_installed_title">Required apps are already installed in your private space</string>
|
||||
<!-- Title for private space creation error screen. [CHAR LIMIT=60] -->
|
||||
<string name="private_space_error_screen_title">Couldn\u2019t set up a private space</string>
|
||||
<!-- Label for button to retry creating private space again on creation error. [CHAR LIMIT=30] -->
|
||||
@@ -1396,6 +1390,10 @@
|
||||
<string name="private_space_gaia_education_bullet4">Suggested content related to your activity in private space apps</string>
|
||||
<!-- Text for button in private space GAIA education screen to start login [CHAR LIMIT=20] -->
|
||||
<string name="private_space_gaia_education_got_it">Got it</string>
|
||||
<!-- The title of the category for settings related to the private space lock [CHAR LIMIT=20] -->
|
||||
<string name="private_space_category_lock">Lock</string>
|
||||
<!-- The title of the category for settings related to hiding the private space [CHAR LIMIT=20] -->
|
||||
<string name="private_space_category_hide">Hide</string>
|
||||
|
||||
<!-- Text shown when "Add fingerprint" button is disabled -->
|
||||
<string name="fingerprint_add_max">You can add up to <xliff:g id="count" example="5">%d</xliff:g> fingerprints</string>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
android:title="@string/private_space_hide_page_title">
|
||||
|
||||
<com.android.settingslib.widget.IllustrationPreference
|
||||
android:key="privatespace_hide_video"
|
||||
android:key="private_space_hide_illustration"
|
||||
settings:searchable="false"
|
||||
settings:lottie_rawRes="@raw/private_space_hide_when_locked_illustration"/>
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
settings:searchable="false">
|
||||
|
||||
<com.android.settingslib.widget.IllustrationPreference
|
||||
android:key="private_space_settings"
|
||||
android:key="private_space_illustration"
|
||||
settings:searchable="false"
|
||||
settings:lottie_rawRes="@raw/private_space_illustration"/>
|
||||
|
||||
@@ -34,7 +34,14 @@
|
||||
settings:searchable="false" />
|
||||
|
||||
<PreferenceCategory
|
||||
android:title="@string/security_header">
|
||||
android:title="@string/private_space_category_lock">
|
||||
|
||||
<Preference
|
||||
android:key="private_space_use_one_lock"
|
||||
android:title="@string/private_space_lock_title"
|
||||
android:fragment="com.android.settings.privatespace.onelock.UseOneLockSettingsFragment"
|
||||
settings:controller="com.android.settings.privatespace.onelock.UseOneLockController"
|
||||
settings:searchable="false" />
|
||||
|
||||
<Preference
|
||||
android:key="private_space_auto_lock"
|
||||
@@ -43,12 +50,10 @@
|
||||
settings:controller="com.android.settings.privatespace.autolock.AutoLockPreferenceController"
|
||||
settings:searchable="false" />
|
||||
|
||||
<Preference
|
||||
android:key="private_space_use_one_lock"
|
||||
android:title="@string/private_space_lock_title"
|
||||
android:fragment="com.android.settings.privatespace.onelock.UseOneLockSettingsFragment"
|
||||
settings:controller="com.android.settings.privatespace.onelock.UseOneLockController"
|
||||
settings:searchable="false" />
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory
|
||||
android:title="@string/private_space_category_hide">
|
||||
|
||||
<Preference
|
||||
android:key="private_space_hidden"
|
||||
|
||||
@@ -33,7 +33,6 @@ import com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoi
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
import com.android.settings.core.instrumentation.SettingsStatsLog;
|
||||
import com.android.settings.display.PreviewPagerAdapter;
|
||||
import com.android.settings.flags.Flags;
|
||||
import com.android.settings.widget.LabeledSeekBarPreference;
|
||||
|
||||
import java.util.Objects;
|
||||
@@ -47,10 +46,6 @@ class TextReadingPreviewController extends BasePreferenceController implements
|
||||
private static final String TAG = "TextReadingPreviewCtrl";
|
||||
private static final int LAYER_INITIAL_INDEX = 0;
|
||||
private static final int FRAME_INITIAL_INDEX = 0;
|
||||
private static final int[] PREVIEW_SAMPLE_RES_IDS = new int[]{
|
||||
R.layout.accessibility_text_reading_preview_app_grid,
|
||||
R.layout.screen_zoom_preview_1,
|
||||
R.layout.accessibility_text_reading_preview_mail_content};
|
||||
private static final String PREVIEW_KEY = "preview";
|
||||
private static final String FONT_SIZE_KEY = "font_size";
|
||||
private static final String DISPLAY_SIZE_KEY = "display_size";
|
||||
@@ -183,9 +178,6 @@ class TextReadingPreviewController extends BasePreferenceController implements
|
||||
|
||||
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
|
||||
static int[] getPreviewSampleLayouts(Context context) {
|
||||
if (!Flags.accessibilityCustomizeTextReadingPreview()) {
|
||||
return PREVIEW_SAMPLE_RES_IDS;
|
||||
}
|
||||
TypedArray previews = context.getResources().obtainTypedArray(
|
||||
R.array.config_text_reading_preview_samples);
|
||||
int previewCount = previews.length();
|
||||
|
||||
@@ -44,8 +44,8 @@ public class UnrestrictedDataAccess extends DashboardFragment {
|
||||
super.onCreate(icicle);
|
||||
mShowSystem = icicle != null && icicle.getBoolean(EXTRA_SHOW_SYSTEM);
|
||||
use(UnrestrictedDataAccessPreferenceController.class).setFilter(
|
||||
mShowSystem ? ApplicationsState.FILTER_ALL_ENABLED
|
||||
: ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER);
|
||||
mShowSystem ? ApplicationsState.FILTER_ENABLED_NOT_QUIET
|
||||
: ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER_NOT_QUIET);
|
||||
use(UnrestrictedDataAccessPreferenceController.class).setSession(getSettingsLifecycle());
|
||||
}
|
||||
|
||||
@@ -62,8 +62,8 @@ public class UnrestrictedDataAccess extends DashboardFragment {
|
||||
mShowSystem = !mShowSystem;
|
||||
item.setTitle(mShowSystem ? R.string.menu_hide_system : R.string.menu_show_system);
|
||||
use(UnrestrictedDataAccessPreferenceController.class).setFilter(
|
||||
mShowSystem ? ApplicationsState.FILTER_ALL_ENABLED
|
||||
: ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER);
|
||||
mShowSystem ? ApplicationsState.FILTER_ENABLED_NOT_QUIET
|
||||
: ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER_NOT_QUIET);
|
||||
use(UnrestrictedDataAccessPreferenceController.class).rebuild();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -70,6 +70,7 @@ public class PhoneNumberPreferenceController extends BasePreferenceController {
|
||||
for (int simSlotNumber = 1; simSlotNumber < mTelephonyManager.getPhoneCount();
|
||||
simSlotNumber++) {
|
||||
final Preference multiSimPreference = createNewPreference(screen.getContext());
|
||||
multiSimPreference.setSelectable(false);
|
||||
multiSimPreference.setCopyingEnabled(true);
|
||||
multiSimPreference.setOrder(phonePreferenceOrder + simSlotNumber);
|
||||
multiSimPreference.setKey(KEY_PHONE_NUMBER + simSlotNumber);
|
||||
|
||||
@@ -181,11 +181,7 @@ public class DataProcessManager {
|
||||
}
|
||||
}
|
||||
// Loads app usage list from database.
|
||||
if (mUserIdsSeries.isMainUserProfileOnly()) {
|
||||
loadDatabaseAppUsageList();
|
||||
} else {
|
||||
mIsDatabaseAppUsageLoaded = true;
|
||||
}
|
||||
loadDatabaseAppUsageList();
|
||||
// Loads the battery event list from database.
|
||||
loadPowerConnectionBatteryEventList();
|
||||
} else {
|
||||
@@ -588,7 +584,8 @@ public class DataProcessManager {
|
||||
lastFullChargeTime,
|
||||
DatabaseUtils.BATTERY_LEVEL_RECORD_EVENTS);
|
||||
final long startTimestamp =
|
||||
(batteryLevelRecordEvents.isEmpty() || !userIdsSeries.isMainUserProfileOnly())
|
||||
(batteryLevelRecordEvents.isEmpty()
|
||||
|| (!isFromPeriodJob && !userIdsSeries.isMainUserProfileOnly()))
|
||||
? lastFullChargeTime
|
||||
: batteryLevelRecordEvents.get(0).getTimestamp();
|
||||
final BatteryLevelData batteryLevelData =
|
||||
|
||||
@@ -43,6 +43,7 @@ import androidx.compose.runtime.MutableState
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalLifecycleOwner
|
||||
@@ -177,11 +178,11 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
override fun Content() {
|
||||
showStartingDialog = remember { mutableStateOf(false) }
|
||||
showError = remember { mutableStateOf(ErrorType.ERROR_NONE) }
|
||||
showProgressDialog = remember { mutableStateOf(false) }
|
||||
showDsdsProgressDialog = remember { mutableStateOf(false) }
|
||||
showRestartDialog = remember { mutableStateOf(false) }
|
||||
showStartingDialog = rememberSaveable { mutableStateOf(false) }
|
||||
showError = rememberSaveable { mutableStateOf(ErrorType.ERROR_NONE) }
|
||||
showProgressDialog = rememberSaveable { mutableStateOf(false) }
|
||||
showDsdsProgressDialog = rememberSaveable { mutableStateOf(false) }
|
||||
showRestartDialog = rememberSaveable { mutableStateOf(false) }
|
||||
scope = rememberCoroutineScope()
|
||||
|
||||
registerSidecarReceiverFlow()
|
||||
@@ -189,7 +190,16 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
|
||||
ErrorDialogImpl()
|
||||
RestartDialogImpl()
|
||||
LaunchedEffect(Unit) {
|
||||
if (onboardingService.activeSubInfoList.isNotEmpty()) {
|
||||
if (showError.value != ErrorType.ERROR_NONE
|
||||
|| showProgressDialog.value
|
||||
|| showDsdsProgressDialog.value
|
||||
|| showRestartDialog.value) {
|
||||
Log.d(TAG, "status: showError:${showError.value}, " +
|
||||
"showProgressDialog:${showProgressDialog.value}, " +
|
||||
"showDsdsProgressDialog:${showDsdsProgressDialog.value}, " +
|
||||
"showRestartDialog:${showRestartDialog.value}")
|
||||
showStartingDialog.value = false
|
||||
} else if (onboardingService.activeSubInfoList.isNotEmpty()) {
|
||||
showStartingDialog.value = true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -225,7 +225,7 @@ class SimOnboardingService {
|
||||
}
|
||||
|
||||
fun addItemForRenaming(subInfo: SubscriptionInfo, newName: String) {
|
||||
if (subInfo.displayName == newName) {
|
||||
if (newName.isEmpty() && subInfo.displayName == newName) {
|
||||
return
|
||||
}
|
||||
renameMutableMap[subInfo.subscriptionId] = newName
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# Default reviewers for this and subdirectories.
|
||||
aroederer@google.com
|
||||
beverlyt@google.com
|
||||
dsandler@android.com
|
||||
juliacr@google.com
|
||||
matiashe@google.com
|
||||
yurilin@google.com
|
||||
@@ -1,218 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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.privatespace;
|
||||
|
||||
import static android.text.Layout.BREAK_STRATEGY_SIMPLE;
|
||||
import static android.view.View.ACCESSIBILITY_LIVE_REGION_POLITE;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
import android.animation.AnimatorSet;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.animation.ValueAnimator;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkInfo;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
import android.util.Pair;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.activity.OnBackPressedCallback;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.navigation.fragment.NavHostFragment;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.InstrumentedFragment;
|
||||
|
||||
import com.airbnb.lottie.LottieAnimationView;
|
||||
import com.google.android.setupdesign.GlifLayout;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/** Fragment to show screens that auto advance during private space setup flow */
|
||||
public class AutoAdvanceSetupFragment extends InstrumentedFragment {
|
||||
private static final String TAG = "AutoAdvanceFragment";
|
||||
private static final String TITLE_INDEX = "title_index";
|
||||
private static final int DELAY_BETWEEN_SCREENS = 5000; // 5 seconds in millis
|
||||
private static final int ANIMATION_DURATION_MILLIS = 500;
|
||||
private static final int HEADER_TEXT_MAX_LINES = 4;
|
||||
private GlifLayout mRootView;
|
||||
private static final Handler sHandler = new Handler(Looper.getMainLooper());
|
||||
private int mScreenTitleIndex;
|
||||
private static final List<Pair<Integer, Integer>> HEADER_ILLUSTRATION_PAIRS =
|
||||
ImmutableList.of(
|
||||
new Pair(R.string.private_space_notifications_hidden_title,
|
||||
R.raw.private_space_notifications_illustration),
|
||||
new Pair(R.string.private_space_apps_installed_title,
|
||||
R.raw.private_space_unlock_to_share_illustration),
|
||||
new Pair(R.string.private_space_explore_settings_title,
|
||||
R.raw.private_space_placeholder_illustration));
|
||||
|
||||
private Runnable mUpdateScreenResources =
|
||||
new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (getActivity() != null) {
|
||||
if (++mScreenTitleIndex < HEADER_ILLUSTRATION_PAIRS.size()) {
|
||||
startFadeOutAnimation();
|
||||
sHandler.postDelayed(mUpdateScreenResources, DELAY_BETWEEN_SCREENS);
|
||||
} else if (PrivateSpaceMaintainer.getInstance(getActivity())
|
||||
.doesPrivateSpaceExist()) {
|
||||
mMetricsFeatureProvider.action(
|
||||
getContext(),
|
||||
SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_SPACE_CREATED,
|
||||
true);
|
||||
if (isConnectedToInternet()) {
|
||||
NavHostFragment.findNavController(AutoAdvanceSetupFragment.this)
|
||||
.navigate(R.id.action_account_intro_fragment);
|
||||
} else {
|
||||
NavHostFragment.findNavController(AutoAdvanceSetupFragment.this)
|
||||
.navigate(R.id.action_set_lock_fragment);
|
||||
}
|
||||
} else {
|
||||
mMetricsFeatureProvider.action(
|
||||
getContext(),
|
||||
SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_SPACE_CREATED,
|
||||
false);
|
||||
showPrivateSpaceErrorScreen();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
if (android.os.Flags.allowPrivateProfile()
|
||||
&& android.multiuser.Flags.enablePrivateSpaceFeatures()) {
|
||||
super.onCreate(savedInstanceState);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(
|
||||
LayoutInflater inflater,
|
||||
@Nullable ViewGroup container,
|
||||
@Nullable Bundle savedInstanceState) {
|
||||
if (savedInstanceState == null) {
|
||||
if (PrivateSpaceMaintainer.getInstance(getActivity()).createPrivateSpace()) {
|
||||
Log.i(TAG, "Private Space created");
|
||||
}
|
||||
} else {
|
||||
mScreenTitleIndex = savedInstanceState.getInt(TITLE_INDEX);
|
||||
if (mScreenTitleIndex >= HEADER_ILLUSTRATION_PAIRS.size()) {
|
||||
return super.onCreateView(inflater, container, savedInstanceState);
|
||||
}
|
||||
}
|
||||
mRootView =
|
||||
(GlifLayout)
|
||||
inflater.inflate(R.layout.private_space_advancing_screen, container, false);
|
||||
mRootView.getHeaderTextView().setMaxLines(HEADER_TEXT_MAX_LINES);
|
||||
mRootView.getHeaderTextView().setBreakStrategy(BREAK_STRATEGY_SIMPLE);
|
||||
mRootView.getHeaderTextView().setAccessibilityLiveRegion(ACCESSIBILITY_LIVE_REGION_POLITE);
|
||||
updateHeaderAndIllustration();
|
||||
OnBackPressedCallback callback =
|
||||
new OnBackPressedCallback(true /* enabled by default */) {
|
||||
@Override
|
||||
public void handleOnBackPressed() {
|
||||
// Handle the back button event. We intentionally don't want to allow back
|
||||
// button to work in this screen during the setup flow.
|
||||
}
|
||||
};
|
||||
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
|
||||
return mRootView;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(@NotNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putInt(TITLE_INDEX, mScreenTitleIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
sHandler.removeCallbacks(mUpdateScreenResources);
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
sHandler.postDelayed(mUpdateScreenResources, DELAY_BETWEEN_SCREENS);
|
||||
super.onResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
return SettingsEnums.PRIVATE_SPACE_SETUP_SPACE_CREATION;
|
||||
}
|
||||
|
||||
private void showPrivateSpaceErrorScreen() {
|
||||
NavHostFragment.findNavController(AutoAdvanceSetupFragment.this)
|
||||
.navigate(R.id.action_advance_profile_error);
|
||||
}
|
||||
|
||||
private void updateHeaderAndIllustration() {
|
||||
mRootView.setHeaderText(HEADER_ILLUSTRATION_PAIRS.get(mScreenTitleIndex).first);
|
||||
LottieAnimationView animationView = mRootView.findViewById(R.id.lottie_animation);
|
||||
animationView.setAnimation(HEADER_ILLUSTRATION_PAIRS.get(mScreenTitleIndex).second);
|
||||
animationView.playAnimation();
|
||||
startFadeInAnimation();
|
||||
}
|
||||
|
||||
private void startFadeInAnimation() {
|
||||
ValueAnimator textView = ObjectAnimator.ofFloat(
|
||||
mRootView.getHeaderTextView(), View.ALPHA, 0f, 1f);
|
||||
ValueAnimator lottieView = ObjectAnimator.ofFloat(
|
||||
mRootView.findViewById(R.id.lottie_animation), View.ALPHA, 0, 1f);
|
||||
AnimatorSet fadeIn = new AnimatorSet();
|
||||
fadeIn.playTogether(textView, lottieView);
|
||||
fadeIn.setDuration(ANIMATION_DURATION_MILLIS).start();
|
||||
}
|
||||
|
||||
private void startFadeOutAnimation() {
|
||||
AnimatorSet fadeOut = new AnimatorSet();
|
||||
ValueAnimator textView = ObjectAnimator.ofFloat(
|
||||
mRootView.getHeaderTextView(), View.ALPHA, 1f, 0f);
|
||||
ValueAnimator lottieView = ObjectAnimator.ofFloat(
|
||||
mRootView.findViewById(R.id.lottie_animation), View.ALPHA, 1f, 0f);
|
||||
fadeOut.playTogether(textView, lottieView);
|
||||
fadeOut.setDuration(ANIMATION_DURATION_MILLIS).start();
|
||||
fadeOut.addListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
updateHeaderAndIllustration();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/** Returns true if device has an active internet connection, false otherwise. */
|
||||
private boolean isConnectedToInternet() {
|
||||
ConnectivityManager cm =
|
||||
(ConnectivityManager)
|
||||
getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
|
||||
return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
|
||||
}
|
||||
}
|
||||
@@ -21,9 +21,12 @@ import android.os.Bundle;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settingslib.widget.IllustrationPreference;
|
||||
|
||||
public class HidePrivateSpaceSettings extends DashboardFragment{
|
||||
public class HidePrivateSpaceSettings extends DashboardFragment {
|
||||
private static final String TAG = "HidePrivateSpaceSettings";
|
||||
private static final String PRIVATE_SPACE_HIDE_ILLUSTRATION_KEY =
|
||||
"private_space_hide_illustration";
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle icicle) {
|
||||
@@ -41,6 +44,14 @@ public class HidePrivateSpaceSettings extends DashboardFragment{
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
final IllustrationPreference illustrationPreference =
|
||||
getPreferenceScreen().findPreference(PRIVATE_SPACE_HIDE_ILLUSTRATION_KEY);
|
||||
illustrationPreference.applyDynamicColor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
return SettingsEnums.PRIVATE_SPACE_SETTINGS;
|
||||
|
||||
@@ -96,13 +96,24 @@ public class PrivateProfileContextHelperActivity extends FragmentActivity {
|
||||
}
|
||||
|
||||
private void onAccountAdded(@Nullable ActivityResult result) {
|
||||
if (result != null && result.getResultCode() == RESULT_OK) {
|
||||
if (result == null) {
|
||||
Log.i(TAG, "private space account login result null");
|
||||
setResult(RESULT_CANCELED);
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
final int resultCode = result.getResultCode();
|
||||
if (resultCode == RESULT_OK) {
|
||||
Log.i(TAG, "private space account login success");
|
||||
setResult(RESULT_OK);
|
||||
} else if (resultCode == RESULT_FIRST_USER) {
|
||||
Log.i(TAG, "private space account login skipped");
|
||||
} else {
|
||||
Log.i(TAG, "private space account login failed");
|
||||
setResult(RESULT_CANCELED);
|
||||
}
|
||||
setResult(
|
||||
resultCode == RESULT_OK || resultCode == RESULT_FIRST_USER
|
||||
? RESULT_OK
|
||||
: RESULT_CANCELED);
|
||||
finish();
|
||||
}
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ public class PrivateSpaceBroadcastReceiver extends BroadcastReceiver {
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (android.multiuser.Flags.enablePrivateSpaceFeatures()
|
||||
&& android.multiuser.Flags.blockPrivateSpaceCreation()) {
|
||||
Log.d("Here", "Intent: " + intent.getAction());
|
||||
Log.d(TAG, "Received Intent: " + intent.getAction());
|
||||
PrivateSpaceMaintainer privateSpaceMaintainer =
|
||||
PrivateSpaceMaintainer.getInstance(context);
|
||||
// Disable the PrivateSpaceAuthenticationActivity when
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
* 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.privatespace;
|
||||
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkInfo;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.activity.OnBackPressedCallback;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.navigation.fragment.NavHostFragment;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.InstrumentedFragment;
|
||||
|
||||
import com.google.android.setupdesign.GlifLayout;
|
||||
|
||||
/** Fragment to a show loading screen and create private profile during private space setup flow */
|
||||
public class PrivateSpaceCreationFragment extends InstrumentedFragment {
|
||||
private static final String TAG = "PrivateSpaceCreateFrag";
|
||||
private static final int PRIVATE_SPACE_CREATE_POST_DELAY_MS = 1000;
|
||||
private static final Handler sHandler = new Handler(Looper.getMainLooper());
|
||||
private Runnable mRunnable =
|
||||
() -> {
|
||||
createPrivateSpace();
|
||||
};
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
if (android.os.Flags.allowPrivateProfile()
|
||||
&& android.multiuser.Flags.enablePrivateSpaceFeatures()) {
|
||||
super.onCreate(savedInstanceState);
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public View onCreateView(
|
||||
@NonNull LayoutInflater inflater,
|
||||
@Nullable ViewGroup container,
|
||||
@Nullable Bundle savedInstanceState) {
|
||||
GlifLayout rootView =
|
||||
(GlifLayout)
|
||||
inflater.inflate(R.layout.private_space_create_screen, container, false);
|
||||
OnBackPressedCallback callback =
|
||||
new OnBackPressedCallback(true /* enabled by default */) {
|
||||
@Override
|
||||
public void handleOnBackPressed() {
|
||||
// Handle the back button event. We intentionally don't want to allow back
|
||||
// button to work in this screen during the setup flow.
|
||||
}
|
||||
};
|
||||
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
|
||||
return rootView;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
// Ensures screen visibility to user by introducing a 1-second delay before creating private
|
||||
// space.
|
||||
sHandler.postDelayed(mRunnable, PRIVATE_SPACE_CREATE_POST_DELAY_MS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
sHandler.removeCallbacks(mRunnable);
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
private void createPrivateSpace() {
|
||||
if (PrivateSpaceMaintainer.getInstance(getActivity()).createPrivateSpace()) {
|
||||
Log.i(TAG, "Private Space created");
|
||||
mMetricsFeatureProvider.action(
|
||||
getContext(), SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_SPACE_CREATED, true);
|
||||
if (isConnectedToInternet()) {
|
||||
NavHostFragment.findNavController(PrivateSpaceCreationFragment.this)
|
||||
.navigate(R.id.action_account_intro_fragment);
|
||||
} else {
|
||||
NavHostFragment.findNavController(PrivateSpaceCreationFragment.this)
|
||||
.navigate(R.id.action_set_lock_fragment);
|
||||
}
|
||||
} else {
|
||||
mMetricsFeatureProvider.action(
|
||||
getContext(), SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_SPACE_CREATED, false);
|
||||
showPrivateSpaceErrorScreen();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
return SettingsEnums.PRIVATE_SPACE_SETUP_SPACE_CREATION;
|
||||
}
|
||||
|
||||
private void showPrivateSpaceErrorScreen() {
|
||||
NavHostFragment.findNavController(PrivateSpaceCreationFragment.this)
|
||||
.navigate(R.id.action_create_profile_error);
|
||||
}
|
||||
|
||||
/** Returns true if device has an active internet connection, false otherwise. */
|
||||
private boolean isConnectedToInternet() {
|
||||
ConnectivityManager cm =
|
||||
(ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
|
||||
return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
|
||||
}
|
||||
}
|
||||
@@ -26,10 +26,12 @@ import android.widget.Toast;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settingslib.widget.IllustrationPreference;
|
||||
|
||||
/** Fragment representing the Private Space dashboard in Settings. */
|
||||
public class PrivateSpaceDashboardFragment extends DashboardFragment {
|
||||
private static final String TAG = "PSDashboardFragment";
|
||||
private static final String PRIVATE_SPACE_ILLUSTRATION_KEY = "private_space_illustration";
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle icicle) {
|
||||
@@ -60,6 +62,14 @@ public class PrivateSpaceDashboardFragment extends DashboardFragment {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
final IllustrationPreference illustrationPreference =
|
||||
getPreferenceScreen().findPreference(PRIVATE_SPACE_ILLUSTRATION_KEY);
|
||||
illustrationPreference.applyDynamicColor();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getPreferenceScreenResId() {
|
||||
return R.xml.private_space_settings;
|
||||
|
||||
@@ -31,7 +31,9 @@ import androidx.navigation.fragment.NavHostFragment;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.InstrumentedFragment;
|
||||
import com.android.settingslib.widget.LottieColorUtils;
|
||||
|
||||
import com.airbnb.lottie.LottieAnimationView;
|
||||
import com.google.android.setupcompat.template.FooterBarMixin;
|
||||
import com.google.android.setupcompat.template.FooterButton;
|
||||
import com.google.android.setupdesign.GlifLayout;
|
||||
@@ -69,6 +71,8 @@ public class PrivateSpaceEducation extends InstrumentedFragment {
|
||||
.setButtonType(FooterButton.ButtonType.CANCEL)
|
||||
.setTheme(com.google.android.setupdesign.R.style.SudGlifButton_Secondary)
|
||||
.build());
|
||||
LottieAnimationView lottieAnimationView = rootView.findViewById(R.id.lottie_animation);
|
||||
LottieColorUtils.applyDynamicColors(getContext(), lottieAnimationView);
|
||||
|
||||
TextView infoTextView = rootView.findViewById(R.id.learn_more);
|
||||
Pattern pattern = Pattern.compile(infoTextView.getText().toString());
|
||||
@@ -91,7 +95,7 @@ public class PrivateSpaceEducation extends InstrumentedFragment {
|
||||
getContext(), SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_START);
|
||||
Log.i(TAG, "Starting private space setup");
|
||||
NavHostFragment.findNavController(PrivateSpaceEducation.this)
|
||||
.navigate(R.id.action_education_to_auto_advance);
|
||||
.navigate(R.id.action_education_to_create);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ public class PrivateSpaceMaintainer {
|
||||
*
|
||||
* <p> This method should be used by the Private Space Setup Flow ONLY.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
|
||||
public final synchronized boolean createPrivateSpace() {
|
||||
if (!Flags.allowPrivateProfile()
|
||||
|| !android.multiuser.Flags.enablePrivateSpaceFeatures()) {
|
||||
|
||||
@@ -34,7 +34,9 @@ import androidx.navigation.fragment.NavHostFragment;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.InstrumentedFragment;
|
||||
import com.android.settingslib.widget.LottieColorUtils;
|
||||
|
||||
import com.airbnb.lottie.LottieAnimationView;
|
||||
import com.google.android.setupcompat.template.FooterBarMixin;
|
||||
import com.google.android.setupcompat.template.FooterButton;
|
||||
import com.google.android.setupdesign.GlifLayout;
|
||||
@@ -82,6 +84,8 @@ public class PrivateSpaceSetLockFragment extends InstrumentedFragment {
|
||||
}
|
||||
};
|
||||
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
|
||||
LottieAnimationView lottieAnimationView = rootView.findViewById(R.id.lottie_animation);
|
||||
LottieColorUtils.applyDynamicColors(getContext(), lottieAnimationView);
|
||||
|
||||
return rootView;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.settings.privatespace;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.ActivityManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
@@ -34,11 +35,15 @@ import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.InstrumentedFragment;
|
||||
import com.android.settingslib.widget.LottieColorUtils;
|
||||
|
||||
import com.airbnb.lottie.LottieAnimationView;
|
||||
import com.google.android.setupcompat.template.FooterBarMixin;
|
||||
import com.google.android.setupcompat.template.FooterButton;
|
||||
import com.google.android.setupdesign.GlifLayout;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/** Fragment for the final screen shown on successful completion of private space setup. */
|
||||
public class SetupSuccessFragment extends InstrumentedFragment {
|
||||
private static final String TAG = "SetupSuccessFragment";
|
||||
@@ -72,6 +77,8 @@ public class SetupSuccessFragment extends InstrumentedFragment {
|
||||
}
|
||||
};
|
||||
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
|
||||
LottieAnimationView lottieAnimationView = rootView.findViewById(R.id.lottie_animation);
|
||||
LottieColorUtils.applyDynamicColors(getContext(), lottieAnimationView);
|
||||
|
||||
return rootView;
|
||||
}
|
||||
@@ -103,7 +110,7 @@ public class SetupSuccessFragment extends InstrumentedFragment {
|
||||
accessPrivateSpaceToast();
|
||||
startActivity(allAppsIntent);
|
||||
Log.i(TAG, "Private space setup complete");
|
||||
activity.finish();
|
||||
deleteAllTaskAndFinish(activity);
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -118,4 +125,12 @@ public class SetupSuccessFragment extends InstrumentedFragment {
|
||||
drawable)
|
||||
.show();
|
||||
}
|
||||
|
||||
private void deleteAllTaskAndFinish(Activity activity) {
|
||||
ActivityManager activityManager = activity.getSystemService(ActivityManager.class);
|
||||
List<ActivityManager.AppTask> tasks = activityManager.getAppTasks();
|
||||
for (var task : tasks) {
|
||||
task.finishAndRemoveTask();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,20 +21,25 @@ import static org.junit.Assert.assertEquals;
|
||||
import android.content.Context;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
|
||||
import com.android.settings.R;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.LooperMode;
|
||||
import org.robolectric.shadows.ShadowLooper;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@LooperMode(LooperMode.Mode.LEGACY)
|
||||
public class BackGestureIndicatorViewTest {
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
|
||||
private Context mContext;
|
||||
|
||||
private BackGestureIndicatorDrawable mLeftDrawable;
|
||||
@@ -44,9 +49,7 @@ public class BackGestureIndicatorViewTest {
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mContext = ApplicationProvider.getApplicationContext();
|
||||
mView = new BackGestureIndicatorView(mContext);
|
||||
|
||||
mLeftDrawable = (BackGestureIndicatorDrawable) ((ImageView) mView.findViewById(
|
||||
@@ -59,6 +62,7 @@ public class BackGestureIndicatorViewTest {
|
||||
public void testSetIndicatoreWidth() {
|
||||
mView.setIndicatorWidth(25, true);
|
||||
mView.setIndicatorWidth(52, false);
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
assertEquals(25, mLeftDrawable.getWidth());
|
||||
assertEquals(52, mRightDrawable.getWidth());
|
||||
|
||||
@@ -23,21 +23,26 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.media.AudioManager;
|
||||
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
|
||||
import com.android.settings.homepage.contextualcards.ContextualCard;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.LooperMode;
|
||||
import org.robolectric.shadows.ShadowLooper;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@LooperMode(LooperMode.Mode.LEGACY)
|
||||
public class AbnormalRingerConditionControllerBaseTest {
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
|
||||
@Mock
|
||||
private ConditionManager mConditionManager;
|
||||
|
||||
@@ -46,8 +51,7 @@ public class AbnormalRingerConditionControllerBaseTest {
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mContext = ApplicationProvider.getApplicationContext();
|
||||
|
||||
mCondition = new TestCondition(mContext, mConditionManager);
|
||||
}
|
||||
@@ -60,9 +64,13 @@ public class AbnormalRingerConditionControllerBaseTest {
|
||||
mCondition.startMonitoringStateChange();
|
||||
|
||||
mContext.sendBroadcast(broadcast1);
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
verify(mConditionManager, never()).onConditionChanged();
|
||||
|
||||
mContext.sendBroadcast(broadcast2);
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
verify(mConditionManager).onConditionChanged();
|
||||
}
|
||||
|
||||
|
||||
@@ -38,22 +38,26 @@ import com.android.internal.app.LocaleStore;
|
||||
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
import org.robolectric.Robolectric;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.annotation.LooperMode;
|
||||
import org.robolectric.shadows.ShadowLooper;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(shadows = {ShadowAlertDialogCompat.class})
|
||||
@LooperMode(LooperMode.Mode.LEGACY)
|
||||
public class LocaleDialogFragmentTest {
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
|
||||
@Mock
|
||||
private OnBackInvokedDispatcher mOnBackInvokedDispatcher;
|
||||
|
||||
@@ -62,8 +66,6 @@ public class LocaleDialogFragmentTest {
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mActivity = Robolectric.setupActivity(FragmentActivity.class);
|
||||
mDialogFragment = LocaleDialogFragment.newInstance();
|
||||
LocaleStore.LocaleInfo localeInfo = LocaleStore.getLocaleInfo(Locale.ENGLISH);
|
||||
@@ -75,6 +77,7 @@ public class LocaleDialogFragmentTest {
|
||||
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
|
||||
fragmentTransaction.add(mDialogFragment, null);
|
||||
fragmentTransaction.commit();
|
||||
ShadowLooper.idleMainLooper();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -57,6 +57,7 @@ import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
|
||||
import com.android.internal.app.LocaleStore;
|
||||
import com.android.settings.R;
|
||||
@@ -72,12 +73,12 @@ import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
import org.robolectric.Robolectric;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.annotation.LooperMode;
|
||||
import org.robolectric.shadows.ShadowLooper;
|
||||
import org.robolectric.util.ReflectionHelpers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -90,9 +91,11 @@ import java.util.Locale;
|
||||
ShadowActivityManager.class,
|
||||
com.android.settings.testutils.shadow.ShadowFragment.class,
|
||||
})
|
||||
@LooperMode(LooperMode.Mode.LEGACY)
|
||||
public class LocaleListEditorTest {
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
|
||||
private static final String ARG_DIALOG_TYPE = "arg_dialog_type";
|
||||
private static final String TAG_DIALOG_CONFIRM_SYSTEM_DEFAULT = "dialog_confirm_system_default";
|
||||
private static final String TAG_DIALOG_NOT_AVAILABLE = "dialog_not_available_locale";
|
||||
@@ -147,8 +150,8 @@ public class LocaleListEditorTest {
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
Context context = ApplicationProvider.getApplicationContext();
|
||||
mContext = spy(context);
|
||||
mLocaleListEditor = spy(new LocaleListEditor());
|
||||
when(mLocaleListEditor.getContext()).thenReturn(mContext);
|
||||
mActivity = spy(Robolectric.buildActivity(FragmentActivity.class).get());
|
||||
@@ -156,11 +159,11 @@ public class LocaleListEditorTest {
|
||||
when(mLocaleListEditor.getNotificationController()).thenReturn(
|
||||
mNotificationController);
|
||||
ReflectionHelpers.setField(mLocaleListEditor, "mEmptyTextView",
|
||||
new TextView(RuntimeEnvironment.application));
|
||||
new TextView(context));
|
||||
ReflectionHelpers.setField(mLocaleListEditor, "mRestrictionsManager",
|
||||
RuntimeEnvironment.application.getSystemService(Context.RESTRICTIONS_SERVICE));
|
||||
context.getSystemService(Context.RESTRICTIONS_SERVICE));
|
||||
ReflectionHelpers.setField(mLocaleListEditor, "mUserManager",
|
||||
RuntimeEnvironment.application.getSystemService(Context.USER_SERVICE));
|
||||
context.getSystemService(Context.USER_SERVICE));
|
||||
ReflectionHelpers.setField(mLocaleListEditor, "mAdapter", mAdapter);
|
||||
ReflectionHelpers.setField(mLocaleListEditor, "mAddLanguage", mAddLanguage);
|
||||
ReflectionHelpers.setField(mLocaleListEditor, "mFragmentManager", mFragmentManager);
|
||||
@@ -283,6 +286,7 @@ public class LocaleListEditorTest {
|
||||
|
||||
// click the remove button
|
||||
dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
assertThat(dialog.isShowing()).isFalse();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user