Merge "[Settings] Remove override the transition to fade during the Suw flow." into sc-v2-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index dc11920..5edf63b 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -197,7 +197,6 @@
         </receiver>
 
         <activity android:name=".SubSettings"
-                  android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout|smallestScreenSize"
                   android:theme="@style/Theme.SubSettings" />
 
         <activity android:name=".Settings$CreateShortcutActivity"
@@ -1258,6 +1257,23 @@
         </activity>
 
         <activity
+            android:name=".Settings$BlueToothPairingActivity"
+            android:label="@string/bluetooth_pairing_page_title"
+            android:permission="android.permission.BLUETOOTH_SCAN"
+            android:exported="true">
+            <intent-filter android:priority="1">
+                <action android:name="android.settings.BLUETOOTH_PAIRING_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                       android:value="com.android.settings.bluetooth.BluetoothPairingDetail" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_connected_devices"/>
+            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+                       android:value="true" />
+        </activity>
+
+        <activity
             android:name="SettingsLicenseActivity"
             android:label="@string/settings_license_activity_title"
             android:exported="true"
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 893c0ad..ebfff6b 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -123,6 +123,8 @@
     public static class AccessibilityDaltonizerSettingsActivity extends SettingsActivity { /* empty */ }
     /** Activity for lockscreen settings. */
     public static class LockScreenSettingsActivity extends SettingsActivity { /* empty */ }
+    /** Activity for bluetooth pairing settings. */
+    public static class BlueToothPairingActivity extends SettingsActivity { /* empty */ }
     /** Activity for Reduce Bright Colors. */
     public static class ReduceBrightColorsSettingsActivity extends SettingsActivity { /* empty */ }
     /** Activity for the security dashboard. */
diff --git a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
index 037f584..2ce2206 100644
--- a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
+++ b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
@@ -53,6 +53,7 @@
 public class RemoveAccountPreferenceController extends AbstractPreferenceController
         implements PreferenceControllerMixin, OnClickListener {
 
+    private static final String TAG = "RemoveAccountPrefController";
     private static final String KEY_REMOVE_ACCOUNT = "remove_account";
 
     private final MetricsFeatureProvider mMetricsFeatureProvider;
@@ -175,10 +176,11 @@
                                 | IOException
                                 | AuthenticatorException e) {
                             // handled below
-                        }
-                        if (failed) {
+                            Log.w(TAG, "Remove account error: " + e);
                             RemoveAccountFailureDialog.show(getTargetFragment());
-                        } else {
+                        }
+                        Log.i(TAG, "failed: " + failed);
+                        if (!failed) {
                             targetActivity.finish();
                         }
                     }, null, mUserHandle);
@@ -210,7 +212,7 @@
             final Context context = getActivity();
 
             return new AlertDialog.Builder(context)
-                    .setTitle(R.string.really_remove_account_title)
+                    .setTitle(R.string.remove_account_label)
                     .setMessage(R.string.remove_account_failed)
                     .setPositiveButton(android.R.string.ok, null)
                     .create();
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
index 74ea27b..eadb5b8 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
@@ -19,10 +19,12 @@
 import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.Intent;
+import android.hardware.SensorPrivacyManager;
 import android.hardware.biometrics.BiometricAuthenticator;
 import android.hardware.face.FaceManager;
 import android.hardware.face.FaceSensorPropertiesInternal;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
@@ -34,10 +36,12 @@
 
 import com.android.settings.R;
 import com.android.settings.Utils;
+import com.android.settings.biometrics.BiometricEnrollActivity;
 import com.android.settings.biometrics.BiometricEnrollIntroduction;
 import com.android.settings.biometrics.BiometricUtils;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.password.ChooseLockSettingsHelper;
+import com.android.settings.utils.SensorPrivacyManagerHelper;
 import com.android.settingslib.RestrictedLockUtilsInternal;
 
 import com.google.android.setupcompat.template.FooterButton;
@@ -57,6 +61,7 @@
     private FaceFeatureProvider mFaceFeatureProvider;
     @Nullable private FooterButton mPrimaryFooterButton;
     @Nullable private FooterButton mSecondaryFooterButton;
+    @Nullable private SensorPrivacyManager mSensorPrivacyManager;
 
     @Override
     protected void onCancelButtonClick(View view) {
@@ -150,6 +155,14 @@
                 });
             }
         }
+
+        mSensorPrivacyManager = getApplicationContext()
+                .getSystemService(SensorPrivacyManager.class);
+        final SensorPrivacyManagerHelper helper = SensorPrivacyManagerHelper
+                .getInstance(getApplicationContext());
+        final boolean cameraPrivacyEnabled = helper
+                .isSensorBlocked(SensorPrivacyManager.Sensors.CAMERA, mUserId);
+        Log.v(TAG, "cameraPrivacyEnabled : " + cameraPrivacyEnabled);
     }
 
     protected boolean generateChallengeOnCreate() {
@@ -309,6 +322,28 @@
     }
 
     @Override
+    protected void onNextButtonClick(View view) {
+        final boolean parentelConsentRequired =
+                getIntent()
+                .getBooleanExtra(BiometricEnrollActivity.EXTRA_REQUIRE_PARENTAL_CONSENT, false);
+        final boolean cameraPrivacyEnabled = SensorPrivacyManagerHelper
+                .getInstance(getApplicationContext())
+                .isSensorBlocked(SensorPrivacyManager.Sensors.CAMERA, mUserId);
+        final boolean isSetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
+        final boolean isSettingUp = isSetupWizard || (parentelConsentRequired
+                && !WizardManagerHelper.isUserSetupComplete(this));
+        if (cameraPrivacyEnabled && !isSettingUp) {
+            if (mSensorPrivacyManager == null) {
+                mSensorPrivacyManager = getApplicationContext()
+                        .getSystemService(SensorPrivacyManager.class);
+            }
+            mSensorPrivacyManager.showSensorUseDialog(SensorPrivacyManager.Sensors.CAMERA);
+        } else {
+            super.onNextButtonClick(view);
+        }
+    }
+
+    @Override
     @NonNull
     protected FooterButton getPrimaryFooterButton() {
         if (mPrimaryFooterButton == null) {
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 800800e..9f819a6 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -68,6 +68,7 @@
 import com.android.settings.biometrics.face.FaceSettings;
 import com.android.settings.biometrics.fingerprint.FingerprintSettings;
 import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment;
+import com.android.settings.bluetooth.BluetoothPairingDetail;
 import com.android.settings.bugreporthandler.BugReportHandlerPicker;
 import com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment;
 import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
@@ -175,6 +176,7 @@
     public static final String[] ENTRY_FRAGMENTS = {
             AdvancedConnectedDeviceDashboardFragment.class.getName(),
             CreateShortcut.class.getName(),
+            BluetoothPairingDetail.class.getName(),
             WifiSettings.class.getName(),
             WifiNetworkDetailsFragment.class.getName(),
             ConfigureWifiSettings.class.getName(),
diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index d5e8235..9076053 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -125,11 +125,8 @@
         }
         Log.i(TAG, "showHomepageWithSuggestion: " + showSuggestion);
         final View homepageView = mHomepageView;
-        if (!mIsTwoPaneLastTime) {
-            mSuggestionView.setVisibility(showSuggestion ? View.VISIBLE : View.GONE);
-        } else {
-            mTwoPaneSuggestionView.setVisibility(showSuggestion ? View.VISIBLE : View.GONE);
-        }
+        mSuggestionView.setVisibility(showSuggestion ? View.VISIBLE : View.GONE);
+        mTwoPaneSuggestionView.setVisibility(showSuggestion ? View.VISIBLE : View.GONE);
         mHomepageView = null;
 
         mLoadedListeners.forEach(listener -> listener.onHomepageLoaded());
diff --git a/src/com/android/settings/homepage/TopLevelSettings.java b/src/com/android/settings/homepage/TopLevelSettings.java
index 2bb8e34..f2e5a35 100644
--- a/src/com/android/settings/homepage/TopLevelSettings.java
+++ b/src/com/android/settings/homepage/TopLevelSettings.java
@@ -54,6 +54,7 @@
     private static final String PREF_KEY_SUPPORT = "top_level_support";
 
     private TopLevelHighlightMixin mHighlightMixin;
+    private boolean mFirstStarted = true;
 
     public TopLevelSettings() {
         final Bundle args = new Bundle();
@@ -135,9 +136,11 @@
 
     @Override
     public void onStart() {
-        // Set default highlight menu key for 1-pane homepage since it will show the placeholder
-        // page once changing back to 2-pane.
-        if (!ActivityEmbeddingUtils.isTwoPaneResolution(getActivity())) {
+        if (mFirstStarted) {
+            mFirstStarted = false;
+        } else if (!ActivityEmbeddingUtils.isTwoPaneResolution(getActivity())) {
+            // Set default highlight menu key for 1-pane homepage since it will show the placeholder
+            // page once changing back to 2-pane.
             setHighlightMenuKey(getString(SettingsHomepageActivity.DEFAULT_HIGHLIGHT_MENU_KEY),
                     /* scrollNeeded= */ false);
         }