Updating Launcher rotation logic
When auto-rotate is on, launcher allways allows rotation. This allows uses to use
locked rotation feature is available on the device
When auto-rotate is off, workspace does not allow rotation, but overview in quickstep
will allow rotation
Bug: 73872056
Change-Id: Ie12365c268fd5e4958634ed97b5a33dcadc691e2
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 38235f4..a1176f1 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -18,8 +18,7 @@
import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION;
import static android.content.pm.ActivityInfo.CONFIG_SCREEN_SIZE;
-import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
-import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
+
import static com.android.launcher3.ItemInfoWithIcon.FLAG_DISABLED_BY_PUBLISHER;
import static com.android.launcher3.ItemInfoWithIcon.FLAG_DISABLED_LOCKED_USER;
import static com.android.launcher3.ItemInfoWithIcon.FLAG_DISABLED_QUIET_USER;
@@ -53,7 +52,6 @@
import android.content.IntentFilter;
import android.content.IntentSender;
import android.content.SharedPreferences;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.database.sqlite.SQLiteDatabase;
@@ -116,6 +114,7 @@
import com.android.launcher3.popup.PopupDataProvider;
import com.android.launcher3.shortcuts.DeepShortcutManager;
import com.android.launcher3.states.InternalStateHandler;
+import com.android.launcher3.states.RotationHelper;
import com.android.launcher3.uioverrides.UiFactory;
import com.android.launcher3.userevent.nano.LauncherLogProto;
import com.android.launcher3.userevent.nano.LauncherLogProto.Action;
@@ -272,10 +271,9 @@
private final PointF mLastDispatchTouchEvent = new PointF();
public ViewGroupFocusHelper mFocusHandler;
- private boolean mRotationEnabled = false;
private boolean mAppLaunchSuccess;
- private RotationPrefChangeHandler mRotationPrefChangeHandler;
+ private RotationHelper mRotationHelper;
private ActionMode mCurrentActionMode;
@Override
@@ -327,20 +325,10 @@
setupViews();
mPopupDataProvider = new PopupDataProvider(this);
- mRotationEnabled = getResources().getBoolean(R.bool.allow_rotation);
- // In case we are on a device with locked rotation, we should look at preferences to check
- // if the user has specifically allowed rotation.
- if (!mRotationEnabled) {
- mRotationEnabled = Utilities.isAllowRotationPrefEnabled(getApplicationContext());
- mRotationPrefChangeHandler = new RotationPrefChangeHandler();
- mSharedPrefs.registerOnSharedPreferenceChangeListener(mRotationPrefChangeHandler);
- }
+ mRotationHelper = new RotationHelper(this);
boolean internalStateHandled = InternalStateHandler.handleCreate(this, getIntent());
if (internalStateHandled) {
- // Temporarily enable the rotation
- mRotationEnabled = true;
-
if (savedInstanceState != null) {
// InternalStateHandler has already set the appropriate state.
// We dont need to do anything.
@@ -372,7 +360,6 @@
// For handling default keys
setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
- updateRequestedOrientation();
setContentView(mLauncherView);
getRootView().dispatchInsets();
@@ -391,17 +378,11 @@
if (mLauncherCallbacks != null) {
mLauncherCallbacks.onCreate(savedInstanceState);
}
+ mRotationHelper.initialize();
TraceHelper.endSection("Launcher-onCreate");
}
- public void updateRequestedOrientation() {
- // On large interfaces, or on devices that a user has specifically enabled screen rotation,
- // we want the screen to auto-rotate based on the current orientation
- setRequestedOrientation(mRotationEnabled
- ? SCREEN_ORIENTATION_UNSPECIFIED : SCREEN_ORIENTATION_NOSENSOR);
- }
-
@Override
public void onConfigurationChanged(Configuration newConfig) {
int diff = newConfig.diff(mOldConfig);
@@ -442,6 +423,10 @@
mModelWriter = mModel.getWriter(mDeviceProfile.isVerticalBarLayout());
}
+ public RotationHelper getRotationHelper() {
+ return mRotationHelper;
+ }
+
@Override
public void onThemeChanged() {
recreate();
@@ -1381,10 +1366,7 @@
mModel.stopLoader();
LauncherAppState.getInstance(this).setLauncher(null);
}
-
- if (mRotationPrefChangeHandler != null) {
- mSharedPrefs.unregisterOnSharedPreferenceChangeListener(mRotationPrefChangeHandler);
- }
+ mRotationHelper.destroy();
try {
mAppWidgetHost.stopListening();
@@ -2727,10 +2709,6 @@
mModel.refreshAndBindWidgetsAndShortcuts(packageUser);
}
- public boolean isRotationEnabled () {
- return mRotationEnabled;
- }
-
/**
* $ adb shell dumpsys activity com.android.launcher3.Launcher [--all]
*/
@@ -2868,18 +2846,6 @@
return ((Launcher) ((ContextWrapper) context).getBaseContext());
}
- private class RotationPrefChangeHandler implements OnSharedPreferenceChangeListener {
-
- @Override
- public void onSharedPreferenceChanged(
- SharedPreferences sharedPreferences, String key) {
- if (Utilities.ALLOW_ROTATION_PREFERENCE_KEY.equals(key)) {
- // Recreate the activity so that it initializes the rotation preference again.
- recreate();
- }
- }
- }
-
@Override
public void onActionModeStarted(ActionMode mode) {
super.onActionModeStarted(mode);