diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2016-11-21 16:02:39 +0530 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2016-11-21 22:28:23 +0530 |
commit | dde4fd971e825749686e7aa77379c65e410eea54 (patch) | |
tree | f23e94c8931b2052d910f0dcba1b0d87a36305f1 | |
parent | aa8a871e337fe42e9339b96833eaf37bf2b64b2f (diff) | |
download | android_packages_apps_Trebuchet-dde4fd971e825749686e7aa77379c65e410eea54.tar.gz android_packages_apps_Trebuchet-dde4fd971e825749686e7aa77379c65e410eea54.tar.bz2 android_packages_apps_Trebuchet-dde4fd971e825749686e7aa77379c65e410eea54.zip |
Changing DeepShortcutManager to have a singleton contructor instead
of getting it from LauncherAppState
This follows the design of other managers and makes it easier to access it
from other processes and non-ui thread.
Bug: 33032833
Change-Id: I8ad82ae5b6cc47bae885f9896985675c7dd0d5b8
9 files changed, 36 insertions, 31 deletions
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index f7d1f4a7e..9a5e1868a 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2594,7 +2594,7 @@ public class Launcher extends Activity if (info.itemType == LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT) { String id = ((ShortcutInfo) info).getDeepShortcutId(); String packageName = intent.getPackage(); - LauncherAppState.getInstance().getShortcutManager().startShortcut( + DeepShortcutManager.getInstance(this).startShortcut( packageName, id, intent.getSourceBounds(), optsBundle, info.user); } else { // Could be launching some bookkeeping activity diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java index 2a43aad23..5937d78fc 100644 --- a/src/com/android/launcher3/LauncherAppState.java +++ b/src/com/android/launcher3/LauncherAppState.java @@ -28,8 +28,6 @@ import com.android.launcher3.compat.UserManagerCompat; import com.android.launcher3.config.ProviderConfig; import com.android.launcher3.dynamicui.ExtractionUtils; import com.android.launcher3.logging.FileLog; -import com.android.launcher3.shortcuts.DeepShortcutManager; -import com.android.launcher3.shortcuts.ShortcutCache; import com.android.launcher3.util.ConfigMonitor; import com.android.launcher3.util.TestingUtils; import com.android.launcher3.util.Thunk; @@ -44,7 +42,6 @@ public class LauncherAppState { @Thunk final LauncherModel mModel; private final IconCache mIconCache; private final WidgetPreviewLoader mWidgetCache; - private final DeepShortcutManager mDeepShortcutManager; @Thunk boolean mWallpaperChangedSinceLastCheck; @@ -98,10 +95,9 @@ public class LauncherAppState { mInvariantDeviceProfile = new InvariantDeviceProfile(sContext); mIconCache = new IconCache(sContext, mInvariantDeviceProfile); mWidgetCache = new WidgetPreviewLoader(sContext, mIconCache); - mDeepShortcutManager = new DeepShortcutManager(sContext, new ShortcutCache()); mAppFilter = AppFilter.loadByName(sContext.getString(R.string.app_filter_class)); - mModel = new LauncherModel(this, mIconCache, mAppFilter, mDeepShortcutManager); + mModel = new LauncherModel(this, mIconCache, mAppFilter); LauncherAppsCompat.getInstance(sContext).addOnAppsChangedCallback(mModel); @@ -173,10 +169,6 @@ public class LauncherAppState { return mWidgetCache; } - public DeepShortcutManager getShortcutManager() { - return mDeepShortcutManager; - } - public boolean hasWallpaperChangedSinceLastCheck() { boolean result = mWallpaperChangedSinceLastCheck; mWallpaperChangedSinceLastCheck = false; diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index c70a47595..144330a98 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -155,7 +155,8 @@ public class LauncherModel extends BroadcastReceiver @Override public void run() { if (mDeepShortcutsLoaded) { - boolean hasShortcutHostPermission = mDeepShortcutManager.hasHostPermission(); + boolean hasShortcutHostPermission = + DeepShortcutManager.getInstance(mApp.getContext()).hasHostPermission(); if (hasShortcutHostPermission != mHasShortcutHostPermission) { mApp.reloadWorkspace(); } @@ -172,7 +173,6 @@ public class LauncherModel extends BroadcastReceiver // </ only access in worker thread > private final IconCache mIconCache; - private final DeepShortcutManager mDeepShortcutManager; private final LauncherAppsCompat mLauncherApps; private final UserManagerCompat mUserManager; @@ -209,14 +209,12 @@ public class LauncherModel extends BroadcastReceiver public void bindDeepShortcutMap(MultiHashMap<ComponentKey, String> deepShortcutMap); } - LauncherModel(LauncherAppState app, IconCache iconCache, AppFilter appFilter, - DeepShortcutManager deepShortcutManager) { + LauncherModel(LauncherAppState app, IconCache iconCache, AppFilter appFilter) { Context context = app.getContext(); mApp = app; mBgAllAppsList = new AllAppsList(iconCache, appFilter); mBgWidgetsModel = new WidgetsModel(iconCache, appFilter); mIconCache = iconCache; - mDeepShortcutManager = deepShortcutManager; mLauncherApps = LauncherAppsCompat.getInstance(context); mUserManager = UserManagerCompat.getInstance(context); @@ -1190,6 +1188,7 @@ public class LauncherModel extends BroadcastReceiver final PackageManager manager = context.getPackageManager(); final boolean isSafeMode = manager.isSafeMode(); final LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(context); + final DeepShortcutManager shortcutManager = DeepShortcutManager.getInstance(context); final boolean isSdCardReady = Utilities.isBootCompleted(); final MultiHashMap<UserHandleCompat, String> pendingPackages = new MultiHashMap<>(); @@ -1287,8 +1286,8 @@ public class LauncherModel extends BroadcastReceiver // We can only query for shortcuts when the user is unlocked. if (userUnlocked) { List<ShortcutInfoCompat> pinnedShortcuts = - mDeepShortcutManager.queryForPinnedShortcuts(null, user); - if (mDeepShortcutManager.wasLastCallSuccess()) { + shortcutManager.queryForPinnedShortcuts(null, user); + if (shortcutManager.wasLastCallSuccess()) { for (ShortcutInfoCompat shortcut : pinnedShortcuts) { shortcutKeyToPinnedShortcuts.put(ShortcutKey.fromInfo(shortcut), shortcut); @@ -1772,7 +1771,7 @@ public class LauncherModel extends BroadcastReceiver MutableInt numTimesPinned = sBgDataModel.pinnedShortcutCounts.get(key); if (numTimesPinned == null || numTimesPinned.value == 0) { // Shortcut is pinned but doesn't exist on the workspace; unpin it. - mDeepShortcutManager.unpinShortcut(key); + shortcutManager.unpinShortcut(key); } } @@ -2325,12 +2324,13 @@ public class LauncherModel extends BroadcastReceiver } if (!mDeepShortcutsLoaded) { sBgDataModel.deepShortcutMap.clear(); - mHasShortcutHostPermission = mDeepShortcutManager.hasHostPermission(); + DeepShortcutManager shortcutManager = DeepShortcutManager.getInstance(mContext); + mHasShortcutHostPermission = shortcutManager.hasHostPermission(); if (mHasShortcutHostPermission) { for (UserHandleCompat user : mUserManager.getUserProfiles()) { if (mUserManager.isUserUnlocked(user)) { - List<ShortcutInfoCompat> shortcuts = mDeepShortcutManager - .queryForAllShortcuts(user); + List<ShortcutInfoCompat> shortcuts = + shortcutManager.queryForAllShortcuts(user); sBgDataModel.updateDeepShortcutMap(null, user, shortcuts); } } diff --git a/src/com/android/launcher3/ShortcutInfo.java b/src/com/android/launcher3/ShortcutInfo.java index fc087363a..513ab0638 100644 --- a/src/com/android/launcher3/ShortcutInfo.java +++ b/src/com/android/launcher3/ShortcutInfo.java @@ -32,6 +32,7 @@ import com.android.launcher3.compat.UserHandleCompat; import com.android.launcher3.compat.UserManagerCompat; import com.android.launcher3.folder.FolderIcon; import com.android.launcher3.graphics.LauncherIcons; +import com.android.launcher3.shortcuts.DeepShortcutManager; import com.android.launcher3.shortcuts.ShortcutInfoCompat; /** @@ -308,7 +309,7 @@ public class ShortcutInfo extends ItemInfo { // TODO: Use cache for this LauncherAppState launcherAppState = LauncherAppState.getInstance(); - Drawable unbadgedDrawable = launcherAppState.getShortcutManager() + Drawable unbadgedDrawable = DeepShortcutManager.getInstance(context) .getShortcutIconDrawable(shortcutInfo, launcherAppState.getInvariantDeviceProfile().fillResIconDpi); diff --git a/src/com/android/launcher3/model/BgDataModel.java b/src/com/android/launcher3/model/BgDataModel.java index c18eeef3d..29defdd08 100644 --- a/src/com/android/launcher3/model/BgDataModel.java +++ b/src/com/android/launcher3/model/BgDataModel.java @@ -26,6 +26,7 @@ import com.android.launcher3.LauncherSettings; import com.android.launcher3.ShortcutInfo; import com.android.launcher3.compat.UserHandleCompat; import com.android.launcher3.config.ProviderConfig; +import com.android.launcher3.shortcuts.DeepShortcutManager; import com.android.launcher3.shortcuts.ShortcutInfoCompat; import com.android.launcher3.shortcuts.ShortcutKey; import com.android.launcher3.util.ComponentKey; @@ -123,8 +124,8 @@ public class BgDataModel { ShortcutKey pinnedShortcut = ShortcutKey.fromShortcutInfo((ShortcutInfo) item); MutableInt count = pinnedShortcutCounts.get(pinnedShortcut); if (count == null || --count.value == 0) { - LauncherAppState.getInstance() - .getShortcutManager().unpinShortcut(pinnedShortcut); + DeepShortcutManager.getInstance(LauncherAppState.getInstance().getContext()) + .unpinShortcut(pinnedShortcut); } // Fall through. } @@ -161,7 +162,7 @@ public class BgDataModel { // Since this is a new item, pin the shortcut in the system server. if (newItem && count.value == 1) { - LauncherAppState.getInstance().getShortcutManager() + DeepShortcutManager.getInstance(LauncherAppState.getInstance().getContext()) .pinShortcut(pinnedShortcut); } // Fall through diff --git a/src/com/android/launcher3/model/ShortcutsChangedTask.java b/src/com/android/launcher3/model/ShortcutsChangedTask.java index 8f7c21db0..3314353b7 100644 --- a/src/com/android/launcher3/model/ShortcutsChangedTask.java +++ b/src/com/android/launcher3/model/ShortcutsChangedTask.java @@ -51,7 +51,8 @@ public class ShortcutsChangedTask extends ExtendedModelTask { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { - DeepShortcutManager deepShortcutManager = app.getShortcutManager(); + final Context context = app.getContext(); + DeepShortcutManager deepShortcutManager = DeepShortcutManager.getInstance(context); deepShortcutManager.onShortcutsChanged(mShortcuts); // Find ShortcutInfo's that have changed on the workspace. @@ -67,7 +68,6 @@ public class ShortcutsChangedTask extends ExtendedModelTask { } } - final Context context = LauncherAppState.getInstance().getContext(); final ArrayList<ShortcutInfo> updatedShortcutInfos = new ArrayList<>(); if (!idsToWorkspaceShortcutInfos.isEmpty()) { // Update the workspace to reflect the changes to updated shortcuts residing on it. diff --git a/src/com/android/launcher3/model/UserLockStateChangedTask.java b/src/com/android/launcher3/model/UserLockStateChangedTask.java index b7b52a448..a89fe0bd7 100644 --- a/src/com/android/launcher3/model/UserLockStateChangedTask.java +++ b/src/com/android/launcher3/model/UserLockStateChangedTask.java @@ -50,7 +50,7 @@ public class UserLockStateChangedTask extends ExtendedModelTask { public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { Context context = app.getContext(); boolean isUserUnlocked = UserManagerCompat.getInstance(context).isUserUnlocked(mUser); - DeepShortcutManager deepShortcutManager = app.getShortcutManager(); + DeepShortcutManager deepShortcutManager = DeepShortcutManager.getInstance(context); HashMap<ShortcutKey, ShortcutInfoCompat> pinnedShortcuts = new HashMap<>(); if (isUserUnlocked) { diff --git a/src/com/android/launcher3/shortcuts/DeepShortcutManager.java b/src/com/android/launcher3/shortcuts/DeepShortcutManager.java index c2c7c1772..41f1a47af 100644 --- a/src/com/android/launcher3/shortcuts/DeepShortcutManager.java +++ b/src/com/android/launcher3/shortcuts/DeepShortcutManager.java @@ -45,10 +45,22 @@ public class DeepShortcutManager { private static final int FLAG_GET_ALL = ShortcutQuery.FLAG_MATCH_DYNAMIC | ShortcutQuery.FLAG_MATCH_MANIFEST | ShortcutQuery.FLAG_MATCH_PINNED; + private static DeepShortcutManager sInstance; + private static final Object sInstanceLock = new Object(); + + public static DeepShortcutManager getInstance(Context context) { + synchronized (sInstanceLock) { + if (sInstance == null) { + sInstance = new DeepShortcutManager(context.getApplicationContext()); + } + return sInstance; + } + } + private final LauncherApps mLauncherApps; private boolean mWasLastCallSuccess; - public DeepShortcutManager(Context context, ShortcutCache shortcutCache) { + private DeepShortcutManager(Context context) { mLauncherApps = (LauncherApps) context.getSystemService(Context.LAUNCHER_APPS_SERVICE); } diff --git a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java index 08ca2429f..314a8628b 100644 --- a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java +++ b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java @@ -52,7 +52,6 @@ import com.android.launcher3.IconCache; import com.android.launcher3.ItemInfo; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherAnimUtils; -import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherModel; import com.android.launcher3.LauncherSettings; import com.android.launcher3.LauncherViewPropertyAnimator; @@ -103,7 +102,7 @@ public class DeepShortcutsContainer extends AbstractFloatingView public DeepShortcutsContainer(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mLauncher = Launcher.getLauncher(context); - mDeepShortcutsManager = LauncherAppState.getInstance().getShortcutManager(); + mDeepShortcutsManager = DeepShortcutManager.getInstance(context); mStartDragThreshold = getResources().getDimensionPixelSize( R.dimen.deep_shortcuts_start_drag_threshold); |