Merge "Fix NPE in SettingsMainSwitchPreference." into sc-dev
diff --git a/src/com/android/settings/biometrics/BiometricStatusPreferenceController.java b/src/com/android/settings/biometrics/BiometricStatusPreferenceController.java
index 70f0baf..801dd03 100644
--- a/src/com/android/settings/biometrics/BiometricStatusPreferenceController.java
+++ b/src/com/android/settings/biometrics/BiometricStatusPreferenceController.java
@@ -30,7 +30,9 @@
 import com.android.internal.widget.LockPatternUtils;
 import com.android.settings.Utils;
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.SettingsBaseActivity;
 import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.transition.SettingsTransitionHelper;
 
 public abstract class BiometricStatusPreferenceController extends BasePreferenceController {
 
@@ -127,6 +129,8 @@
         }
         intent.putExtra(Intent.EXTRA_USER_ID, userId);
         intent.putExtra(EXTRA_FROM_SETTINGS_SUMMARY, true);
+        intent.putExtra(SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE,
+                SettingsTransitionHelper.TransitionType.TRANSITION_SLIDE);
         context.startActivity(intent);
         return true;
     }
diff --git a/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java b/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
index d8197c0..6847367 100644
--- a/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
+++ b/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
@@ -34,9 +34,11 @@
 import com.android.settings.Utils;
 import com.android.settings.biometrics.BiometricEnrollBase;
 import com.android.settings.biometrics.BiometricUtils;
+import com.android.settings.core.SettingsBaseActivity;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.password.ChooseLockGeneric;
 import com.android.settings.password.ChooseLockSettingsHelper;
+import com.android.settingslib.transition.SettingsTransitionHelper;
 
 /**
  * Base fragment with the confirming credential functionality for combined biometrics settings.
@@ -203,6 +205,8 @@
                     true);
             intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_GK_PW_HANDLE, true);
             intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOR_BIOMETRICS, true);
+            intent.putExtra(SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE,
+                    SettingsTransitionHelper.TransitionType.TRANSITION_SLIDE);
 
             if (mUserId != UserHandle.USER_NULL) {
                 intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
index a989eef..80a6f05 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
@@ -153,6 +153,7 @@
         intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
         intent.putExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, mChallenge);
         startActivity(intent);
+        overridePendingTransition(R.anim.sud_slide_back_in, R.anim.sud_slide_back_out);
     }
 
     private void onAddAnotherButtonClick(View view) {
diff --git a/src/com/android/settings/deviceinfo/storage/StorageSelectionPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageSelectionPreferenceController.java
index 2ab0239..5d5a2a5 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageSelectionPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageSelectionPreferenceController.java
@@ -75,7 +75,7 @@
         mStorageAdapter.addAll(storageEntries);
 
         if (mSpinnerPreference != null) {
-            mSpinnerPreference.setClickable(mStorageAdapter.getCount() > 1);
+            mSpinnerPreference.setVisible(mStorageAdapter.getCount() > 1);
         }
     }
 
@@ -97,7 +97,7 @@
         mSpinnerPreference = screen.findPreference(getPreferenceKey());
         mSpinnerPreference.setAdapter(mStorageAdapter);
         mSpinnerPreference.setOnItemSelectedListener(this);
-        mSpinnerPreference.setClickable(mStorageAdapter.getCount() > 1);
+        mSpinnerPreference.setVisible(mStorageAdapter.getCount() > 1);
     }
 
     @Override
diff --git a/src/com/android/settings/security/ChangeProfileScreenLockPreferenceController.java b/src/com/android/settings/security/ChangeProfileScreenLockPreferenceController.java
index 54b78be..8e1a4f8 100644
--- a/src/com/android/settings/security/ChangeProfileScreenLockPreferenceController.java
+++ b/src/com/android/settings/security/ChangeProfileScreenLockPreferenceController.java
@@ -30,6 +30,7 @@
 import com.android.settings.Utils;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.password.ChooseLockGeneric;
+import com.android.settingslib.transition.SettingsTransitionHelper;
 
 public class ChangeProfileScreenLockPreferenceController extends
         ChangeScreenLockPreferenceController {
@@ -81,6 +82,7 @@
                 .setDestination(ChooseLockGeneric.ChooseLockGenericFragment.class.getName())
                 .setSourceMetricsCategory(mHost.getMetricsCategory())
                 .setArguments(extras)
+                .setTransitionType(SettingsTransitionHelper.TransitionType.TRANSITION_SLIDE)
                 .launch();
 
         return true;
diff --git a/src/com/android/settings/security/LockUnificationPreferenceController.java b/src/com/android/settings/security/LockUnificationPreferenceController.java
index 98a3c6f..b6e215c 100644
--- a/src/com/android/settings/security/LockUnificationPreferenceController.java
+++ b/src/com/android/settings/security/LockUnificationPreferenceController.java
@@ -26,6 +26,7 @@
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.util.Log;
 
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
@@ -43,6 +44,7 @@
 import com.android.settingslib.RestrictedLockUtilsInternal;
 import com.android.settingslib.RestrictedSwitchPreference;
 import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.transition.SettingsTransitionHelper;
 
 /**
  * Controller for password unification/un-unification flows.
@@ -173,6 +175,7 @@
                 .setDestination(ChooseLockGeneric.ChooseLockGenericFragment.class.getName())
                 .setSourceMetricsCategory(mHost.getMetricsCategory())
                 .setArguments(extras)
+                .setTransitionType(SettingsTransitionHelper.TransitionType.TRANSITION_SLIDE)
                 .launch();
     }
 
@@ -229,6 +232,7 @@
                 .setTitleRes(R.string.lock_settings_picker_title)
                 .setSourceMetricsCategory(mHost.getMetricsCategory())
                 .setArguments(extras)
+                .setTransitionType(SettingsTransitionHelper.TransitionType.TRANSITION_SLIDE)
                 .launch();
     }
 
diff --git a/tests/unit/src/com/android/settings/deviceinfo/storage/StorageSelectionPreferenceControllerTest.java b/tests/unit/src/com/android/settings/deviceinfo/storage/StorageSelectionPreferenceControllerTest.java
index 86351cb..f4661ef 100644
--- a/tests/unit/src/com/android/settings/deviceinfo/storage/StorageSelectionPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/deviceinfo/storage/StorageSelectionPreferenceControllerTest.java
@@ -18,6 +18,8 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.Mockito.mock;
+
 import android.content.Context;
 import android.os.Looper;
 import android.os.storage.StorageManager;
@@ -33,6 +35,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -47,9 +50,20 @@
 
     @Before
     public void setUp() throws Exception {
+        if (Looper.myLooper() == null) {
+            Looper.prepare();
+        }
         mContext = ApplicationProvider.getApplicationContext();
         mStorageManager = mContext.getSystemService(StorageManager.class);
         mController = new StorageSelectionPreferenceController(mContext, PREFERENCE_KEY);
+
+        final PreferenceManager preferenceManager = new PreferenceManager(mContext);
+        final PreferenceScreen preferenceScreen =
+                preferenceManager.createPreferenceScreen(mContext);
+        final SettingsSpinnerPreference spinnerPreference = new SettingsSpinnerPreference(mContext);
+        spinnerPreference.setKey(PREFERENCE_KEY);
+        preferenceScreen.addPreference(spinnerPreference);
+        mController.displayPreference(preferenceScreen);
     }
 
     @Test
@@ -70,16 +84,6 @@
 
     @Test
     public void setSelectedStorageEntry_primaryStorage_correctSelectedAdapterItem() {
-        if (Looper.myLooper() == null) {
-            Looper.prepare();
-        }
-        final PreferenceManager preferenceManager = new PreferenceManager(mContext);
-        final PreferenceScreen preferenceScreen =
-                preferenceManager.createPreferenceScreen(mContext);
-        final SettingsSpinnerPreference spinnerPreference = new SettingsSpinnerPreference(mContext);
-        spinnerPreference.setKey(PREFERENCE_KEY);
-        preferenceScreen.addPreference(spinnerPreference);
-        mController.displayPreference(preferenceScreen);
         final StorageEntry primaryStorageEntry =
                 StorageEntry.getDefaultInternalStorageEntry(mContext);
         mController.setStorageEntries(mStorageManager.getVolumes().stream()
@@ -91,5 +95,26 @@
         assertThat((StorageEntry) mController.mSpinnerPreference.getSelectedItem())
                 .isEqualTo(primaryStorageEntry);
     }
+
+    @Test
+    public void setStorageEntries_1StorageEntry_preferenceInvisible() {
+        final List<StorageEntry> storageEntries = new ArrayList<>();
+        storageEntries.add(mock(StorageEntry.class));
+
+        mController.setStorageEntries(storageEntries);
+
+        assertThat(mController.mSpinnerPreference.isVisible()).isFalse();
+    }
+
+    @Test
+    public void setStorageEntries_2StorageEntries_preferenceVisible() {
+        final List<StorageEntry> storageEntries = new ArrayList<>();
+        storageEntries.add(mock(StorageEntry.class));
+        storageEntries.add(mock(StorageEntry.class));
+
+        mController.setStorageEntries(storageEntries);
+
+        assertThat(mController.mSpinnerPreference.isVisible()).isTrue();
+    }
 }