Merge "Rotate overview only if system rotation allowed" into ub-launcher3-rvc-dev

This commit is contained in:
Vinit Nayak
2020-04-21 17:57:00 +00:00
committed by Android (Google) Code Review
2 changed files with 55 additions and 18 deletions
@@ -285,6 +285,9 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
}
};
private final RecentsOrientedState.SystemRotationChangeListener mSystemRotationChangeListener =
enabled -> toggleOrientationEventListener();
private final PinnedStackAnimationListener mIPinnedStackAnimationListener =
new PinnedStackAnimationListener();
@@ -484,6 +487,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
SystemUiProxy.INSTANCE.get(getContext()).setPinnedStackAnimationListener(
mIPinnedStackAnimationListener);
mOrientationState.init();
mOrientationState.addSystemRotationChangeListener(mSystemRotationChangeListener);
}
@Override
@@ -498,6 +502,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
mIdp.removeOnChangeListener(this);
SystemUiProxy.INSTANCE.get(getContext()).setPinnedStackAnimationListener(null);
mIPinnedStackAnimationListener.setActivity(null);
mOrientationState.removeSystemRotationChangeListener(mSystemRotationChangeListener);
mOrientationState.destroy();
}
@@ -554,13 +559,6 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
}
public void setOverviewStateEnabled(boolean enabled) {
if (canEnableOverviewRotationAnimation()) {
if (enabled) {
mOrientationListener.enable();
} else {
mOrientationListener.disable();
}
}
mOverviewStateEnabled = enabled;
updateTaskStackListenerState();
if (!enabled) {
@@ -568,13 +566,26 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
// its thumbnail
mTmpRunningTask = null;
}
toggleOrientationEventListener();
}
private void toggleOrientationEventListener() {
boolean canEnable = canEnableOverviewRotationAnimation() && mOverviewStateEnabled;
UI_HELPER_EXECUTOR.execute(() -> {
if (canEnable) {
mOrientationListener.enable();
} else {
mOrientationListener.disable();
}
});
}
private boolean canEnableOverviewRotationAnimation() {
return supportsVerticalLandscape() // not 3P launcher
&& !TestProtocol.sDisableSensorRotation // Ignore hardware dependency for tests..
&& mOrientationListener.canDetectOrientation() // ..but does the hardware even work?
&& !mOrientationState.canLauncherAutoRotate(); // launcher is going to rotate itself
&& (mOrientationState.isSystemRotationAllowed() &&
!mOrientationState.canLauncherRotate()); // launcher is going to rotate itself
}
public void onDigitalWellbeingToastShown() {
@@ -51,6 +51,8 @@ import com.android.launcher3.touch.PagedOrientationHandler;
import com.android.launcher3.touch.PortraitPagedViewHandler;
import java.lang.annotation.Retention;
import java.util.ArrayList;
import java.util.List;
/**
* Container to hold orientation/rotation related information for Launcher.
@@ -81,6 +83,10 @@ public final class RecentsOrientedState implements SharedPreferences.OnSharedPre
private @SurfaceRotation int mDisplayRotation = ROTATION_0;
private @SurfaceRotation int mLauncherRotation = Surface.ROTATION_0;
public interface SystemRotationChangeListener {
void onSystemRotationChanged(boolean enabled);
}
/**
* If {@code true} we default to {@link PortraitPagedViewHandler} and don't support any fake
* launcher orientations.
@@ -93,6 +99,7 @@ public final class RecentsOrientedState implements SharedPreferences.OnSharedPre
private final SharedPreferences mSharedPrefs;
private final boolean mAllowConfigurationDefaultValue;
private List<SystemRotationChangeListener> mSystemRotationChangeListeners = new ArrayList<>();
private final Matrix mTmpMatrix = new Matrix();
private final Matrix mTmpInverseMatrix = new Matrix();
@@ -167,14 +174,6 @@ public final class RecentsOrientedState implements SharedPreferences.OnSharedPre
return true;
}
public boolean areMultipleLayoutOrientationsDisabled() {
return mDisableMultipleOrientations;
}
public boolean canLauncherAutoRotate() {
return mIsHomeRotationAllowed && mIsSystemRotationAllowed;
}
/**
* Setting this preference renders future calls to {@link #update(int, int, int)} as a no-op.
*/
@@ -198,6 +197,10 @@ public final class RecentsOrientedState implements SharedPreferences.OnSharedPre
} catch (Settings.SettingNotFoundException e) {
Log.e(TAG, "autorotate setting not found", e);
}
for (SystemRotationChangeListener listener : mSystemRotationChangeListeners) {
listener.onSystemRotationChanged(mIsSystemRotationAllowed);
}
}
private void updateHomeRotationSetting() {
@@ -205,6 +208,15 @@ public final class RecentsOrientedState implements SharedPreferences.OnSharedPre
mAllowConfigurationDefaultValue);
}
public void addSystemRotationChangeListener(SystemRotationChangeListener listener) {
mSystemRotationChangeListeners.add(listener);
listener.onSystemRotationChanged(mIsSystemRotationAllowed);
}
public void removeSystemRotationChangeListener(SystemRotationChangeListener listener) {
mSystemRotationChangeListeners.remove(listener);
}
public void init() {
mSharedPrefs.registerOnSharedPreferenceChangeListener(this);
mContentResolver.registerContentObserver(
@@ -217,6 +229,7 @@ public final class RecentsOrientedState implements SharedPreferences.OnSharedPre
public void destroy() {
mSharedPrefs.unregisterOnSharedPreferenceChangeListener(this);
mContentResolver.unregisterContentObserver(mSystemAutoRotateObserver);
mSystemRotationChangeListeners.clear();
}
@SurfaceRotation
@@ -229,12 +242,25 @@ public final class RecentsOrientedState implements SharedPreferences.OnSharedPre
return mTouchRotation;
}
@SurfaceRotation
public int getLauncherRotation() {
return mLauncherRotation;
}
public boolean areMultipleLayoutOrientationsDisabled() {
return mDisableMultipleOrientations;
}
public boolean isSystemRotationAllowed() {
return mIsSystemRotationAllowed;
}
public boolean isHomeRotationAllowed() {
return mIsHomeRotationAllowed;
}
public int getLauncherRotation() {
return mLauncherRotation;
public boolean canLauncherRotate() {
return isSystemRotationAllowed() && isHomeRotationAllowed();
}
public int getTouchRotationDegrees() {