Merge "Adding workprofile shortcuts after the loader has completed" into ub-launcher3-burnaby
This commit is contained in:
@@ -107,6 +107,7 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
@Thunk DeferredHandler mHandler = new DeferredHandler();
|
@Thunk DeferredHandler mHandler = new DeferredHandler();
|
||||||
@Thunk LoaderTask mLoaderTask;
|
@Thunk LoaderTask mLoaderTask;
|
||||||
@Thunk boolean mIsLoaderTaskRunning;
|
@Thunk boolean mIsLoaderTaskRunning;
|
||||||
|
@Thunk boolean mHasLoaderCompletedOnce;
|
||||||
|
|
||||||
private static final String MIGRATE_AUTHORITY = "com.android.launcher2.settings";
|
private static final String MIGRATE_AUTHORITY = "com.android.launcher2.settings";
|
||||||
|
|
||||||
@@ -128,6 +129,12 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
// a normal load, we also clear this set of Runnables.
|
// a normal load, we also clear this set of Runnables.
|
||||||
static final ArrayList<Runnable> mDeferredBindRunnables = new ArrayList<Runnable>();
|
static final ArrayList<Runnable> mDeferredBindRunnables = new ArrayList<Runnable>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set of runnables to be called on the background thread after the workspace binding
|
||||||
|
* is complete.
|
||||||
|
*/
|
||||||
|
static final ArrayList<Runnable> mBindCompleteRunnables = new ArrayList<Runnable>();
|
||||||
|
|
||||||
@Thunk WeakReference<Callbacks> mCallbacks;
|
@Thunk WeakReference<Callbacks> mCallbacks;
|
||||||
|
|
||||||
// < only access in worker thread >
|
// < only access in worker thread >
|
||||||
@@ -263,6 +270,19 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Runs the specified runnable after the loader is complete
|
||||||
|
*/
|
||||||
|
private void runAfterBindCompletes(Runnable r) {
|
||||||
|
if (isLoadingWorkspace() || !mHasLoaderCompletedOnce) {
|
||||||
|
synchronized (mBindCompleteRunnables) {
|
||||||
|
mBindCompleteRunnables.add(r);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
runOnWorkerThread(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
boolean canMigrateFromOldLauncherDb(Launcher launcher) {
|
boolean canMigrateFromOldLauncherDb(Launcher launcher) {
|
||||||
return mOldContentProviderExists && !launcher.isLauncherPreinstalled() ;
|
return mOldContentProviderExists && !launcher.isLauncherPreinstalled() ;
|
||||||
}
|
}
|
||||||
@@ -424,7 +444,7 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
* Find a position on the screen for the given size or adds a new screen.
|
* Find a position on the screen for the given size or adds a new screen.
|
||||||
* @return screenId and the coordinates for the item.
|
* @return screenId and the coordinates for the item.
|
||||||
*/
|
*/
|
||||||
@Thunk static Pair<Long, int[]> findSpaceForItem(
|
@Thunk Pair<Long, int[]> findSpaceForItem(
|
||||||
Context context,
|
Context context,
|
||||||
ArrayList<Long> workspaceScreens,
|
ArrayList<Long> workspaceScreens,
|
||||||
ArrayList<Long> addedWorkspaceScreensFinal,
|
ArrayList<Long> addedWorkspaceScreensFinal,
|
||||||
@@ -432,7 +452,7 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
LongSparseArray<ArrayList<ItemInfo>> screenItems = new LongSparseArray<>();
|
LongSparseArray<ArrayList<ItemInfo>> screenItems = new LongSparseArray<>();
|
||||||
|
|
||||||
// Use sBgItemsIdMap as all the items are already loaded.
|
// Use sBgItemsIdMap as all the items are already loaded.
|
||||||
// TODO: Throw exception is above condition is not met.
|
assertWorkspaceLoaded();
|
||||||
synchronized (sBgLock) {
|
synchronized (sBgLock) {
|
||||||
for (ItemInfo info : sBgItemsIdMap) {
|
for (ItemInfo info : sBgItemsIdMap) {
|
||||||
if (info.container == LauncherSettings.Favorites.CONTAINER_DESKTOP) {
|
if (info.container == LauncherSettings.Favorites.CONTAINER_DESKTOP) {
|
||||||
@@ -875,12 +895,18 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
updateItemInDatabaseHelper(context, values, item, "updateItemInDatabase");
|
updateItemInDatabaseHelper(context, values, item, "updateItemInDatabase");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void assertWorkspaceLoaded() {
|
||||||
|
if (LauncherAppState.isDogfoodBuild() && (isLoadingWorkspace() || !mHasLoaderCompletedOnce)) {
|
||||||
|
throw new RuntimeException("Trying to add shortcut while loader is running");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the shortcuts already exists on the workspace. This must be called after
|
* Returns true if the shortcuts already exists on the workspace. This must be called after
|
||||||
* the workspace has been loaded. We identify a shortcut by its intent.
|
* the workspace has been loaded. We identify a shortcut by its intent.
|
||||||
* TODO: Throw exception is above condition is not met.
|
|
||||||
*/
|
*/
|
||||||
@Thunk static boolean shortcutExists(Context context, Intent intent, UserHandleCompat user) {
|
@Thunk boolean shortcutExists(Context context, Intent intent, UserHandleCompat user) {
|
||||||
|
assertWorkspaceLoaded();
|
||||||
final String intentWithPkg, intentWithoutPkg;
|
final String intentWithPkg, intentWithoutPkg;
|
||||||
final String packageName;
|
final String packageName;
|
||||||
if (intent.getComponent() != null) {
|
if (intent.getComponent() != null) {
|
||||||
@@ -1390,6 +1416,16 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
mHandler.post(r);
|
mHandler.post(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Run all the bind complete runnables after workspace is bound.
|
||||||
|
if (!mBindCompleteRunnables.isEmpty()) {
|
||||||
|
synchronized (mBindCompleteRunnables) {
|
||||||
|
for (final Runnable r : mBindCompleteRunnables) {
|
||||||
|
runOnWorkerThread(r);
|
||||||
|
}
|
||||||
|
mBindCompleteRunnables.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void stopLoader() {
|
public void stopLoader() {
|
||||||
@@ -1615,6 +1651,7 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
mLoaderTask = null;
|
mLoaderTask = null;
|
||||||
}
|
}
|
||||||
mIsLoaderTaskRunning = false;
|
mIsLoaderTaskRunning = false;
|
||||||
|
mHasLoaderCompletedOnce = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2794,7 +2831,7 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
for (UserHandleCompat user : profiles) {
|
for (UserHandleCompat user : profiles) {
|
||||||
// Query for the set of apps
|
// Query for the set of apps
|
||||||
final long qiaTime = DEBUG_LOADERS ? SystemClock.uptimeMillis() : 0;
|
final long qiaTime = DEBUG_LOADERS ? SystemClock.uptimeMillis() : 0;
|
||||||
List<LauncherActivityInfoCompat> apps = mLauncherApps.getActivityList(null, user);
|
final List<LauncherActivityInfoCompat> apps = mLauncherApps.getActivityList(null, user);
|
||||||
if (DEBUG_LOADERS) {
|
if (DEBUG_LOADERS) {
|
||||||
Log.d(TAG, "getActivityList took "
|
Log.d(TAG, "getActivityList took "
|
||||||
+ (SystemClock.uptimeMillis()-qiaTime) + "ms for user " + user);
|
+ (SystemClock.uptimeMillis()-qiaTime) + "ms for user " + user);
|
||||||
@@ -2849,11 +2886,15 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
mBgAllAppsList.add(new AppInfo(mContext, app, user, mIconCache));
|
mBgAllAppsList.add(new AppInfo(mContext, app, user, mIconCache));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!user.equals(UserHandleCompat.myUserHandle())) {
|
final ManagedProfileHeuristic heuristic = ManagedProfileHeuristic.get(mContext, user);
|
||||||
ManagedProfileHeuristic heuristic = ManagedProfileHeuristic.get(mContext, user);
|
if (heuristic != null) {
|
||||||
if (heuristic != null) {
|
runAfterBindCompletes(new Runnable() {
|
||||||
heuristic.processUserApps(apps);
|
|
||||||
}
|
@Override
|
||||||
|
public void run() {
|
||||||
|
heuristic.processUserApps(apps);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Huh? Shouldn't this be inside the Runnable below?
|
// Huh? Shouldn't this be inside the Runnable below?
|
||||||
|
|||||||
Reference in New Issue
Block a user