From 61d2358ba1fa40d185e87db6d3d5a05fef1be7ce Mon Sep 17 00:00:00 2001 From: Suphon Thanakornpakapong Date: Mon, 31 May 2021 10:47:43 +0700 Subject: [PATCH] Fix more crashes below Android 10 --- lawnchair/src/app/lawnchair/LawnchairApp.kt | 20 +++++++++---------- .../android/quickstep/views/RecentsView.java | 4 ++-- .../android/quickstep/RecentTasksList.java | 6 +++++- .../com/android/quickstep/RecentsModel.java | 6 +++++- .../quickstep/SysUINavigationMode.java | 5 +++++ .../android/launcher3/model/BgDataModel.java | 2 +- .../model/GridSizeMigrationTask.java | 2 +- .../android/launcher3/model/LoaderCursor.java | 2 +- 8 files changed, 30 insertions(+), 17 deletions(-) diff --git a/lawnchair/src/app/lawnchair/LawnchairApp.kt b/lawnchair/src/app/lawnchair/LawnchairApp.kt index f7b160edd9..24fc5e3343 100644 --- a/lawnchair/src/app/lawnchair/LawnchairApp.kt +++ b/lawnchair/src/app/lawnchair/LawnchairApp.kt @@ -25,6 +25,7 @@ import android.os.Bundle import android.util.Log import androidx.annotation.Keep import app.lawnchair.util.restartLauncher +import com.android.launcher3.LauncherAppState import com.android.launcher3.Utilities import com.android.quickstep.RecentsActivity @@ -32,11 +33,15 @@ class LawnchairApp : Application() { val activityHandler = ActivityHandler() var mismatchedQuickstepTarget = false - val recentsEnabled by lazy { checkRecentsComponent() } + private val recentsEnabled by lazy { checkRecentsComponent() } val TAG = "LawnchairApp" + override fun onCreate() { + super.onCreate() + instance = this + } + fun onLauncherAppStateCreated() { - sApplication = this registerActivityLifecycleCallbacks(activityHandler) } @@ -120,16 +125,11 @@ class LawnchairApp : Application() { companion object { @JvmStatic - fun getContext(): Context? { - return sApplication?.applicationContext - } - - private var sApplication: Application? = null + var instance: LawnchairApp? = null + private set @JvmStatic - fun get(context: Context): LawnchairApp { - return context.applicationContext as LawnchairApp - } + val isRecentsEnabled: Boolean get() = instance?.recentsEnabled == true } } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java index 4b61744bcb..e86c475344 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java @@ -559,7 +559,7 @@ public abstract class RecentsView extends PagedView updateTaskStackListenerState(); mModel.getThumbnailCache().getHighResLoadingState().addCallback(this); mActivity.addMultiWindowModeChangedListener(mMultiWindowModeChangedListener); - if (LawnchairApp.get(getContext()).getRecentsEnabled()) { + if (LawnchairApp.isRecentsEnabled()) { ActivityManagerWrapper.getInstance().registerTaskStackListener(mTaskStackListener); mSyncTransactionApplier = new SurfaceTransactionApplier(this); } @@ -579,7 +579,7 @@ public abstract class RecentsView extends PagedView updateTaskStackListenerState(); mModel.getThumbnailCache().getHighResLoadingState().removeCallback(this); mActivity.removeMultiWindowModeChangedListener(mMultiWindowModeChangedListener); - if (LawnchairApp.get(getContext()).getRecentsEnabled()) { + if (LawnchairApp.isRecentsEnabled()) { ActivityManagerWrapper.getInstance().unregisterTaskStackListener(mTaskStackListener); mSyncTransactionApplier = null; } diff --git a/quickstep/src/com/android/quickstep/RecentTasksList.java b/quickstep/src/com/android/quickstep/RecentTasksList.java index 70b4f20c2b..913974ed9a 100644 --- a/quickstep/src/com/android/quickstep/RecentTasksList.java +++ b/quickstep/src/com/android/quickstep/RecentTasksList.java @@ -37,6 +37,8 @@ import java.util.Collections; import java.util.List; import java.util.function.Consumer; +import app.lawnchair.LawnchairApp; + /** * Manages the recent task list from the system, caching it as necessary. */ @@ -61,7 +63,9 @@ public class RecentTasksList extends TaskStackChangeListener { mKeyguardManager = keyguardManager; mChangeId = 1; mActivityManagerWrapper = activityManagerWrapper; - mActivityManagerWrapper.registerTaskStackListener(this); + if (LawnchairApp.isRecentsEnabled()) { + mActivityManagerWrapper.registerTaskStackListener(this); + } } /** diff --git a/quickstep/src/com/android/quickstep/RecentsModel.java b/quickstep/src/com/android/quickstep/RecentsModel.java index 6f54ba2935..8ffbba5554 100644 --- a/quickstep/src/com/android/quickstep/RecentsModel.java +++ b/quickstep/src/com/android/quickstep/RecentsModel.java @@ -42,6 +42,8 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; +import app.lawnchair.LawnchairApp; + /** * Singleton class to load and manage recents model. */ @@ -68,7 +70,9 @@ public class RecentsModel extends TaskStackChangeListener { mIconCache = new TaskIconCache(context, looper); mThumbnailCache = new TaskThumbnailCache(context, looper); - ActivityManagerWrapper.getInstance().registerTaskStackListener(this); + if (LawnchairApp.isRecentsEnabled()) { + ActivityManagerWrapper.getInstance().registerTaskStackListener(this); + } IconProvider.registerIconChangeListener(context, this::onPackageIconChanged, MAIN_EXECUTOR.getHandler()); } diff --git a/quickstep/src/com/android/quickstep/SysUINavigationMode.java b/quickstep/src/com/android/quickstep/SysUINavigationMode.java index f2675f2b41..a59274ec09 100644 --- a/quickstep/src/com/android/quickstep/SysUINavigationMode.java +++ b/quickstep/src/com/android/quickstep/SysUINavigationMode.java @@ -27,6 +27,7 @@ import android.content.Intent; import android.content.res.Resources; import android.util.Log; +import com.android.launcher3.Utilities; import com.android.launcher3.logging.StatsLogManager.LauncherEvent; import com.android.launcher3.touch.PagedOrientationHandler; import com.android.launcher3.util.MainThreadInitializedObject; @@ -84,6 +85,10 @@ public class SysUINavigationMode { updateMode(); } }, getPackageFilter("android", ACTION_OVERLAY_CHANGED)); + + if (!Utilities.ATLEAST_Q) { + mMode = Mode.THREE_BUTTONS; + } } /** Updates navigation mode when needed. */ diff --git a/src/com/android/launcher3/model/BgDataModel.java b/src/com/android/launcher3/model/BgDataModel.java index 72a2792533..d24bea9e87 100644 --- a/src/com/android/launcher3/model/BgDataModel.java +++ b/src/com/android/launcher3/model/BgDataModel.java @@ -143,7 +143,7 @@ public class BgDataModel { screenSet.add(item.screenId); } } - if (FeatureFlags.topQsbOnFirstScreenEnabled(LawnchairApp.getContext()) || screenSet.isEmpty()) { + if (FeatureFlags.topQsbOnFirstScreenEnabled(LawnchairApp.getInstance()) || screenSet.isEmpty()) { screenSet.add(Workspace.FIRST_SCREEN_ID); } return screenSet.getArray(); diff --git a/src/com/android/launcher3/model/GridSizeMigrationTask.java b/src/com/android/launcher3/model/GridSizeMigrationTask.java index cb1f334574..6026b02198 100644 --- a/src/com/android/launcher3/model/GridSizeMigrationTask.java +++ b/src/com/android/launcher3/model/GridSizeMigrationTask.java @@ -262,7 +262,7 @@ public class GridSizeMigrationTask { */ protected void migrateScreen(int screenId) { // If we are migrating the first screen, do not touch the first row. - int startY = (FeatureFlags.topQsbOnFirstScreenEnabled(LawnchairApp.getContext()) && screenId == Workspace.FIRST_SCREEN_ID) + int startY = (FeatureFlags.topQsbOnFirstScreenEnabled(LawnchairApp.getInstance()) && screenId == Workspace.FIRST_SCREEN_ID) ? 1 : 0; ArrayList items = loadWorkspaceEntries(screenId); diff --git a/src/com/android/launcher3/model/LoaderCursor.java b/src/com/android/launcher3/model/LoaderCursor.java index 13b26c499d..708cbbcf3f 100644 --- a/src/com/android/launcher3/model/LoaderCursor.java +++ b/src/com/android/launcher3/model/LoaderCursor.java @@ -447,7 +447,7 @@ public class LoaderCursor extends CursorWrapper { if (item.screenId == Workspace.FIRST_SCREEN_ID) { // Mark the first row as occupied (if the feature is enabled) // in order to account for the QSB. - screen.markCells(0, 0, countX + 1, 1, FeatureFlags.topQsbOnFirstScreenEnabled(LawnchairApp.getContext())); + screen.markCells(0, 0, countX + 1, 1, FeatureFlags.topQsbOnFirstScreenEnabled(LawnchairApp.getInstance())); } occupied.put(item.screenId, screen); }