Merge "Fix launcher flicker when unlocking on seascape." into sc-dev
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java
index 12ce9f3..f681d75 100644
--- a/src/com/android/launcher3/DeviceProfile.java
+++ b/src/com/android/launcher3/DeviceProfile.java
@@ -607,8 +607,9 @@
*/
public boolean updateIsSeascape(Context context) {
if (isVerticalBarLayout()) {
- boolean isSeascape = DisplayController.getDefaultDisplay(context).getInfo().rotation
- == Surface.ROTATION_270;
+ // Check an up-to-date info.
+ boolean isSeascape = DisplayController.getDefaultDisplay(context)
+ .createInfoForContext(context).rotation == Surface.ROTATION_270;
if (mIsSeascape != isSeascape) {
mIsSeascape = isSeascape;
return true;
diff --git a/src/com/android/launcher3/util/DisplayController.java b/src/com/android/launcher3/util/DisplayController.java
index 355c949..3b7bcc2 100644
--- a/src/com/android/launcher3/util/DisplayController.java
+++ b/src/com/android/launcher3/util/DisplayController.java
@@ -31,6 +31,8 @@
import androidx.annotation.VisibleForTesting;
+import com.android.launcher3.Utilities;
+
import java.util.ArrayList;
/**
@@ -179,23 +181,35 @@
return mInfo;
}
+ /** Creates and up-to-date DisplayController.Info for the given context. */
+ public Info createInfoForContext(Context context) {
+ Display display = Utilities.ATLEAST_R
+ ? context.getDisplay()
+ : context
+ .getSystemService(DisplayManager.class)
+ .getDisplay(mId);
+ return display == null
+ ? new Info(context)
+ : new Info(context, display);
+ }
+
protected void handleOnChange() {
Info oldInfo = mInfo;
- Info info = new Info(mDisplayContext);
+ Info newInfo = createInfoForContext(mDisplayContext);
int change = 0;
- if (info.hasDifferentSize(oldInfo)) {
+ if (newInfo.hasDifferentSize(oldInfo)) {
change |= CHANGE_SIZE;
}
- if (oldInfo.rotation != info.rotation) {
+ if (newInfo.rotation != oldInfo.rotation) {
change |= CHANGE_ROTATION;
}
- if (info.singleFrameMs != oldInfo.singleFrameMs) {
+ if (newInfo.singleFrameMs != oldInfo.singleFrameMs) {
change |= CHANGE_FRAME_DELAY;
}
if (change != 0) {
- mInfo = info;
+ mInfo = newInfo;
final int flags = change;
MAIN_EXECUTOR.execute(() -> notifyChange(flags));
}