Merge "[Panlingual] Fix settings crash from rotation." into tm-dev
diff --git a/src/com/android/settings/display/ScreenTimeoutSettings.java b/src/com/android/settings/display/ScreenTimeoutSettings.java
index 20795d7..2fc0164 100644
--- a/src/com/android/settings/display/ScreenTimeoutSettings.java
+++ b/src/com/android/settings/display/ScreenTimeoutSettings.java
@@ -32,14 +32,8 @@
 import android.os.PowerManager;
 import android.os.UserHandle;
 import android.provider.Settings;
-import android.text.SpannableString;
-import android.text.Spanned;
-import android.text.style.ClickableSpan;
 import android.util.Log;
-import android.view.View;
 
-import androidx.annotation.NonNull;
-import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
@@ -95,7 +89,7 @@
     RestrictedLockUtils.EnforcedAdmin mAdmin;
 
     @VisibleForTesting
-    Preference mDisableOptionsPreference;
+    FooterPreference mDisableOptionsPreference;
 
     @VisibleForTesting
     AdaptiveSleepPermissionPreferenceController mAdaptiveSleepPermissionController;
@@ -228,26 +222,13 @@
                         R.string.admin_disabled_other_options));
         final String textMoreDetails = getResources().getString(R.string.admin_more_details);
 
-        final SpannableString spannableString = new SpannableString(
-                textDisabledByAdmin + System.lineSeparator()
-                        + System.lineSeparator() + textMoreDetails);
-        final ClickableSpan clickableSpan = new ClickableSpan() {
-            @Override
-            public void onClick(@NonNull View widget) {
-                RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(), mAdmin);
-            }
-        };
-
-        if (textDisabledByAdmin != null && textMoreDetails != null) {
-            spannableString.setSpan(clickableSpan, textDisabledByAdmin.length() + 1,
-                    textDisabledByAdmin.length() + textMoreDetails.length() + 2,
-                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-        }
-
         mDisableOptionsPreference = new FooterPreference(getContext());
-        mDisableOptionsPreference.setLayoutResource(R.layout.preference_footer);
-        mDisableOptionsPreference.setTitle(spannableString);
+        mDisableOptionsPreference.setTitle(textDisabledByAdmin);
         mDisableOptionsPreference.setSelectable(false);
+        mDisableOptionsPreference.setLearnMoreText(textMoreDetails);
+        mDisableOptionsPreference.setLearnMoreAction(v -> {
+            RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(), mAdmin);
+        });
         mDisableOptionsPreference.setIcon(R.drawable.ic_info_outline_24dp);
 
         // The 'disabled by admin' preference should always be at the end of the setting page.
diff --git a/src/com/android/settings/dream/DreamPickerController.java b/src/com/android/settings/dream/DreamPickerController.java
index 5afc492..c638a97 100644
--- a/src/com/android/settings/dream/DreamPickerController.java
+++ b/src/com/android/settings/dream/DreamPickerController.java
@@ -141,10 +141,9 @@
         public void onItemClicked() {
             mActiveDream = mDreamInfo;
             mBackend.setActiveDream(mDreamInfo.componentName);
-            mMetricsFeatureProvider.action(
-                    mContext,
-                    SettingsEnums.ACTION_DREAM_SELECT_TYPE,
-                    mDreamInfo.componentName.flattenToString());
+            mMetricsFeatureProvider.action(SettingsEnums.PAGE_UNKNOWN,
+                    SettingsEnums.ACTION_DREAM_SELECT_TYPE, SettingsEnums.PAGE_UNKNOWN,
+                    mDreamInfo.componentName.flattenToString(), 1);
         }
 
         @Override
diff --git a/src/com/android/settings/notification/zen/ZenCustomRuleSettingsBase.java b/src/com/android/settings/notification/zen/ZenCustomRuleSettingsBase.java
index b417e03..12605af 100644
--- a/src/com/android/settings/notification/zen/ZenCustomRuleSettingsBase.java
+++ b/src/com/android/settings/notification/zen/ZenCustomRuleSettingsBase.java
@@ -59,6 +59,10 @@
 
     @Override
     public void onResume() {
+        if (!mIsFirstLaunch) {
+            // Rule will be used in updatePreferenceStates() in super.onResume().
+            updateRule();
+        }
         super.onResume();
         updatePreferences();
     }
@@ -66,6 +70,7 @@
     @Override
     public void onZenModeConfigChanged() {
         super.onZenModeConfigChanged();
+        updateRule();
         updatePreferences();
         updatePreferenceStates();
     }
@@ -80,10 +85,6 @@
     }
 
     public void updatePreferences() {
-        if (!mIsFirstLaunch) {
-            updateRule();
-        }
-
         final PreferenceScreen screen = getPreferenceScreen();
         String categoryKey = getPreferenceCategoryKey();
         if (categoryKey != null) {
diff --git a/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java b/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java
index 41e4429..009ac53 100644
--- a/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java
@@ -44,12 +44,12 @@
 import android.provider.SearchIndexableResource;
 import android.provider.Settings;
 
-import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.widget.FooterPreference;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -86,7 +86,7 @@
     AdaptiveSleepBatterySaverPreferenceController mAdaptiveSleepBatterySaverPreferenceController;
 
     @Mock
-    Preference mDisableOptionsPreference;
+    FooterPreference mDisableOptionsPreference;
 
     @Mock
     private PackageManager mPackageManager;