Bringing back auto-rotate settings

Bug: 77654352
Change-Id: I0910fc8afe2fb7e125d57912abc35bbbd5df9d74
diff --git a/src/com/android/launcher3/SettingsActivity.java b/src/com/android/launcher3/SettingsActivity.java
index c9bd32b..738a864 100644
--- a/src/com/android/launcher3/SettingsActivity.java
+++ b/src/com/android/launcher3/SettingsActivity.java
@@ -16,6 +16,9 @@
 
 package com.android.launcher3;
 
+import static com.android.launcher3.states.RotationHelper.ALLOW_ROTATION_PREFERENCE_KEY;
+import static com.android.launcher3.states.RotationHelper.getAllowRotationDefaultValue;
+
 import android.annotation.TargetApi;
 import android.app.Activity;
 import android.app.AlertDialog;
@@ -84,6 +87,7 @@
     public static class LauncherSettingsFragment extends PreferenceFragment {
 
         private IconBadgingObserver mIconBadgingObserver;
+        private RotationLockObserver mRotationLockObserver;
 
         private String mPreferenceKey;
         private boolean mPreferenceHighlighted = false;
@@ -123,6 +127,22 @@
                     getPreferenceScreen().removePreference(iconShapeOverride);
                 }
             }
+
+            // Setup allow rotation preference
+            Preference rotationPref = findPreference(ALLOW_ROTATION_PREFERENCE_KEY);
+            if (getResources().getBoolean(R.bool.allow_rotation)) {
+                // Launcher supports rotation by default. No need to show this setting.
+                getPreferenceScreen().removePreference(rotationPref);
+            } else {
+                mRotationLockObserver = new RotationLockObserver(rotationPref, resolver);
+
+                // Register a content observer to listen for system setting changes while
+                // this UI is active.
+                mRotationLockObserver.register(Settings.System.ACCELEROMETER_ROTATION);
+
+                // Initialize the UI once
+                rotationPref.setDefaultValue(getAllowRotationDefaultValue());
+            }
         }
 
         @Override
@@ -181,6 +201,10 @@
                 mIconBadgingObserver.unregister();
                 mIconBadgingObserver = null;
             }
+            if (mRotationLockObserver != null) {
+                mRotationLockObserver.unregister();
+                mRotationLockObserver = null;
+            }
             super.onDestroy();
         }
 
@@ -204,6 +228,23 @@
         }
     }
 
+    private static class RotationLockObserver extends SettingsObserver.System {
+
+        private final Preference mRotationPref;
+
+        public RotationLockObserver(Preference rotationPref, ContentResolver resolver) {
+            super(resolver);
+            mRotationPref = rotationPref;
+        }
+
+        @Override
+        public void onSettingChanged(boolean enabled) {
+            mRotationPref.setEnabled(enabled);
+            mRotationPref.setSummary(enabled
+                    ? R.string.allow_rotation_desc : R.string.allow_rotation_blocked_desc);
+        }
+    }
+
     /**
      * Content observer which listens for system badging setting changes,
      * and updates the launcher badging setting subtext accordingly.