diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 83a7d77601..9992fdeb90 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -648,8 +648,13 @@ public class DeviceProfile { public boolean updateIsSeascape(Context context) { if (isVerticalBarLayout()) { // Check an up-to-date info. - boolean isSeascape = DisplayController.getDefaultDisplay(context) - .createInfoForContext(context).rotation == Surface.ROTATION_270; + DisplayController.Info displayInfo = DisplayController.getDefaultDisplay(context) + .createInfoForContext(context); + if (displayInfo == null) { + return false; + } + + boolean isSeascape = displayInfo.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 3b7bcc285a..a8a7e944cf 100644 --- a/src/com/android/launcher3/util/DisplayController.java +++ b/src/com/android/launcher3/util/DisplayController.java @@ -29,6 +29,7 @@ import android.util.Log; import android.util.SparseArray; import android.view.Display; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.launcher3.Utilities; @@ -182,20 +183,26 @@ public class DisplayController implements DisplayListener { } /** Creates and up-to-date DisplayController.Info for the given context. */ + @Nullable 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); + Display display = Utilities.ATLEAST_R ? context.getDisplay() : null; + if (display == null) { + display = context.getSystemService(DisplayManager.class).getDisplay(mId); + } + if (display == null) { + return null; + } + // Refresh the Context the prevent stale DisplayMetrics. + Context displayContext = context.getApplicationContext().createDisplayContext(display); + return new Info(displayContext, display); } protected void handleOnChange() { Info oldInfo = mInfo; Info newInfo = createInfoForContext(mDisplayContext); + if (newInfo == null) { + return; + } int change = 0; if (newInfo.hasDifferentSize(oldInfo)) {