if (info.itemType == LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT) {
String id = ((ShortcutInfo) info).getDeepShortcutId();
String packageName = intent.getPackage();
- LauncherAppsCompat.getInstance(this).startShortcut(
- packageName, id, intent.getSourceBounds(), optsBundle, info.user);
+ LauncherAppState.getInstance().getShortcutManager().startShortcut(
+ packageName, id, intent.getSourceBounds(), optsBundle, info.user);
} else {
// Could be launching some bookkeeping activity
startActivity(intent, optsBundle);
}
}
incrementPinnedShortcutCount(key, shouldPin);
- info = ShortcutInfo.fromDeepShortcutInfo(pinnedShortcut,
- context, launcherApps);
+ info = ShortcutInfo.fromDeepShortcutInfo(
+ pinnedShortcut, context);
} else { // item type == ITEM_TYPE_SHORTCUT
info = getShortcutInfo(c, context, titleIndex, cursorIconInfo);
List<ShortcutInfo> shortcutInfos = idsToWorkspaceShortcutInfos
.get(fullDetails.getId());
for (ShortcutInfo shortcutInfo : shortcutInfos) {
- shortcutInfo.updateFromDeepShortcutInfo(fullDetails, context, mLauncherApps);
+ shortcutInfo.updateFromDeepShortcutInfo(fullDetails, context);
updatedShortcutInfos.add(shortcutInfo);
}
}
*/
@TargetApi(Build.VERSION_CODES.N)
public static ShortcutInfo fromDeepShortcutInfo(ShortcutInfoCompat shortcutInfo,
- Context context, LauncherAppsCompat launcherApps) {
+ Context context) {
ShortcutInfo si = new ShortcutInfo();
si.user = shortcutInfo.getUserHandle();
si.itemType = LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT;
si.intent = shortcutInfo.makeIntent(context);
si.flags = 0;
- si.updateFromDeepShortcutInfo(shortcutInfo, context, launcherApps);
+ si.updateFromDeepShortcutInfo(shortcutInfo, context);
return si;
}
- public void updateFromDeepShortcutInfo(ShortcutInfoCompat shortcutInfo,
- Context context, LauncherAppsCompat launcherApps) {
+ public void updateFromDeepShortcutInfo(ShortcutInfoCompat shortcutInfo, Context context) {
title = shortcutInfo.getShortLabel();
CharSequence label = shortcutInfo.getLongLabel();
.getBadgedLabelForUser(label, user);
LauncherAppState launcherAppState = LauncherAppState.getInstance();
- Drawable unbadgedIcon = launcherApps.getShortcutIconDrawable(shortcutInfo, launcherAppState
- .getInvariantDeviceProfile().fillResIconDpi);
+ Drawable unbadgedIcon = launcherAppState.getShortcutManager()
+ .getShortcutIconDrawable(shortcutInfo,
+ launcherAppState.getInvariantDeviceProfile().fillResIconDpi);
Bitmap icon = unbadgedIcon == null ? null
: Utilities.createBadgedIconBitmap(unbadgedIcon, user, context);
setIcon(icon != null ? icon : launcherAppState.getIconCache().getDefaultIcon(user));
import android.graphics.drawable.Drawable;
import android.graphics.drawable.PaintDrawable;
import android.os.Build;
+import android.os.Build.VERSION;
import android.os.Bundle;
import android.os.PowerManager;
+import android.support.v4.os.BuildCompat;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
private static final int[] sLoc0 = new int[2];
private static final int[] sLoc1 = new int[2];
+ public static boolean isNycMR1OrAbove() {
+ // TODO: Use the check from support lib
+ return !"REL".equals(VERSION.CODENAME)
+ && "NMR1".compareTo(VERSION.CODENAME) <= 0;
+ }
+
// TODO: use Build.VERSION_CODES when available
public static final boolean ATLEAST_MARSHMALLOW = Build.VERSION.SDK_INT >= 23;
public static LauncherAppsCompat getInstance(Context context) {
synchronized (sInstanceLock) {
if (sInstance == null) {
- if (Utilities.isNycOrAbove()) {
- sInstance = new LauncherAppsCompatVNMR1(context.getApplicationContext());
- } else if (Utilities.ATLEAST_LOLLIPOP) {
+ if (Utilities.ATLEAST_LOLLIPOP) {
sInstance = new LauncherAppsCompatVL(context.getApplicationContext());
} else {
sInstance = new LauncherAppsCompatV16(context.getApplicationContext());
public abstract boolean isActivityEnabledForProfile(ComponentName component,
UserHandleCompat user);
public abstract boolean isPackageSuspendedForProfile(String packageName, UserHandleCompat user);
- public abstract List<ShortcutInfoCompat> getShortcuts(LauncherApps.ShortcutQuery q,
- UserHandleCompat userHandle);
- public abstract void pinShortcuts(String packageName, List<String> pinnedIds,
- UserHandleCompat userHandle);
- public abstract void startShortcut(String packageName, String id, Rect sourceBounds,
- Bundle startActivityOptions, UserHandleCompat user);
- public abstract Drawable getShortcutIconDrawable(ShortcutInfoCompat shortcutInfo, int density);
}
return false;
}
- @Override
- public List<ShortcutInfoCompat> getShortcuts(LauncherApps.ShortcutQuery q,
- UserHandleCompat userHandle) {
- return null;
- }
-
- @Override
- public void pinShortcuts(String packageName, List<String> pinnedIds,
- UserHandleCompat userHandle) {
- // Not supported, so do nothing.
- }
-
- @Override
- public void startShortcut(String packageName, String id, Rect sourceBounds,
- Bundle startActivityOptions, UserHandleCompat user) {
- // Not supported, so do nothing.
- }
-
- @Override
- public Drawable getShortcutIconDrawable(ShortcutInfoCompat shortcutInfo, int density) {
- return null;
- }
-
private void unregisterForPackageIntents() {
mContext.unregisterReceiver(mPackageMonitor);
}
+++ /dev/null
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.launcher3.compat;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.content.pm.LauncherApps;
-import android.content.pm.ShortcutInfo;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.UserHandle;
-
-import com.android.launcher3.shortcuts.ShortcutInfoCompat;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@TargetApi(Build.VERSION_CODES.N)
-public class LauncherAppsCompatVNMR1 extends LauncherAppsCompatVL {
-
- LauncherAppsCompatVNMR1(Context context) {
- super(context);
- }
-
- @Override
- public List<ShortcutInfoCompat> getShortcuts(LauncherApps.ShortcutQuery q,
- UserHandleCompat userHandle) {
- List<ShortcutInfo> shortcutInfos = mLauncherApps.getShortcuts(q, userHandle.getUser());
- if (shortcutInfos == null) {
- return null;
- }
- List<ShortcutInfoCompat> shortcutInfoCompats = new ArrayList<>(shortcutInfos.size());
- for (ShortcutInfo shortcutInfo : shortcutInfos) {
- shortcutInfoCompats.add(new ShortcutInfoCompat(shortcutInfo));
- }
- return shortcutInfoCompats;
- }
-
- @Override
- public void pinShortcuts(String packageName, List<String> pinnedIds,
- UserHandleCompat userHandle) {
- mLauncherApps.pinShortcuts(packageName, pinnedIds, userHandle.getUser());
- }
-
- @Override
- public void startShortcut(String packageName, String id, Rect sourceBounds,
- Bundle startActivityOptions, UserHandleCompat user) {
- mLauncherApps.startShortcut(packageName, id, sourceBounds,
- startActivityOptions, user.getUser());
- }
-
- @Override
- public Drawable getShortcutIconDrawable(ShortcutInfoCompat shortcutInfo, int density) {
- return mLauncherApps.getShortcutIconDrawable(shortcutInfo.getShortcutInfo(), density);
- }
-
- private static class WrappedCallback extends LauncherApps.Callback {
- private OnAppsChangedCallbackCompat mCallback;
-
- public WrappedCallback(OnAppsChangedCallbackCompat callback) {
- mCallback = callback;
- }
-
- public void onPackageRemoved(String packageName, UserHandle user) {
- mCallback.onPackageRemoved(packageName, UserHandleCompat.fromUser(user));
- }
-
- public void onPackageAdded(String packageName, UserHandle user) {
- mCallback.onPackageAdded(packageName, UserHandleCompat.fromUser(user));
- }
-
- public void onPackageChanged(String packageName, UserHandle user) {
- mCallback.onPackageChanged(packageName, UserHandleCompat.fromUser(user));
- }
-
- public void onPackagesAvailable(String[] packageNames, UserHandle user, boolean replacing) {
- mCallback.onPackagesAvailable(packageNames, UserHandleCompat.fromUser(user), replacing);
- }
-
- public void onPackagesUnavailable(String[] packageNames, UserHandle user,
- boolean replacing) {
- mCallback.onPackagesUnavailable(packageNames, UserHandleCompat.fromUser(user),
- replacing);
- }
-
- public void onPackagesSuspended(String[] packageNames, UserHandle user) {
- mCallback.onPackagesSuspended(packageNames, UserHandleCompat.fromUser(user));
- }
-
- public void onPackagesUnsuspended(String[] packageNames, UserHandle user) {
- mCallback.onPackagesUnsuspended(packageNames, UserHandleCompat.fromUser(user));
- }
-
- @Override
- public void onShortcutsChanged(String packageName, List<ShortcutInfo> shortcuts,
- UserHandle user) {
- List<ShortcutInfoCompat> shortcutInfoCompats = new ArrayList<>(shortcuts.size());
- for (ShortcutInfo shortcutInfo : shortcuts) {
- shortcutInfoCompats.add(new ShortcutInfoCompat(shortcutInfo));
- }
-
- mCallback.onShortcutsChanged(packageName, shortcutInfoCompats,
- UserHandleCompat.fromUser(user));
- }
- }
-}
-
import android.annotation.TargetApi;
import android.content.ComponentName;
import android.content.Context;
+import android.content.pm.LauncherApps;
import android.content.pm.LauncherApps.ShortcutQuery;
-import android.os.Build;
-import android.os.Process;
-import android.util.Log;
+import android.content.pm.ShortcutInfo;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
-import com.android.launcher3.compat.LauncherAppsCompat;
+import com.android.launcher3.Utilities;
import com.android.launcher3.compat.UserHandleCompat;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
-import java.util.Map;
/**
* Performs operations related to deep shortcuts, such as querying for them, pinning them, etc.
*/
-@TargetApi(Build.VERSION_CODES.N)
public class DeepShortcutManager {
- private static final int FLAG_GET_ALL = ShortcutQuery.FLAG_GET_DYNAMIC
- | ShortcutQuery.FLAG_GET_PINNED | ShortcutQuery.FLAG_GET_MANIFEST;
- private final LauncherAppsCompat mLauncherApps;
+ // TODO: Replace this with platform constants when the new sdk is available.
+ public static final int FLAG_MATCH_DYNAMIC = 1 << 0;
+ public static final int FLAG_MATCH_MANIFEST = 1 << 3;
+ public static final int FLAG_MATCH_PINNED = 1 << 1;
+
+ private static final int FLAG_GET_ALL =
+ FLAG_MATCH_DYNAMIC | FLAG_MATCH_PINNED | FLAG_MATCH_MANIFEST;
+
+ private final LauncherApps mLauncherApps;
public DeepShortcutManager(Context context, ShortcutCache shortcutCache) {
- mLauncherApps = LauncherAppsCompat.getInstance(context);
+ mLauncherApps = (LauncherApps) context.getSystemService(Context.LAUNCHER_APPS_SERVICE);
}
public void onShortcutsChanged(List<ShortcutInfoCompat> shortcuts) {
* Removes the given shortcut from the current list of pinned shortcuts.
* (Runs on background thread)
*/
+ @TargetApi(25)
public void unpinShortcut(final ShortcutKey key) {
- String packageName = key.componentName.getPackageName();
- String id = key.id;
- UserHandleCompat user = key.user;
- List<String> pinnedIds = extractIds(queryForPinnedShortcuts(packageName, user));
- pinnedIds.remove(id);
- mLauncherApps.pinShortcuts(packageName, pinnedIds, user);
+ if (Utilities.isNycMR1OrAbove()) {
+ String packageName = key.componentName.getPackageName();
+ String id = key.id;
+ UserHandleCompat user = key.user;
+ List<String> pinnedIds = extractIds(queryForPinnedShortcuts(packageName, user));
+ pinnedIds.remove(id);
+ mLauncherApps.pinShortcuts(packageName, pinnedIds, user.getUser());
+ }
}
/**
* Adds the given shortcut to the current list of pinned shortcuts.
* (Runs on background thread)
*/
+ @TargetApi(25)
public void pinShortcut(final ShortcutKey key) {
- String packageName = key.componentName.getPackageName();
- String id = key.id;
- UserHandleCompat user = key.user;
- List<String> pinnedIds = extractIds(queryForPinnedShortcuts(packageName, user));
- pinnedIds.add(id);
- mLauncherApps.pinShortcuts(packageName, pinnedIds, user);
+ if (Utilities.isNycMR1OrAbove()) {
+ String packageName = key.componentName.getPackageName();
+ String id = key.id;
+ UserHandleCompat user = key.user;
+ List<String> pinnedIds = extractIds(queryForPinnedShortcuts(packageName, user));
+ pinnedIds.add(id);
+ mLauncherApps.pinShortcuts(packageName, pinnedIds, user.getUser());
+ }
+ }
+
+ @TargetApi(25)
+ public void startShortcut(String packageName, String id, Rect sourceBounds,
+ Bundle startActivityOptions, UserHandleCompat user) {
+ if (Utilities.isNycMR1OrAbove()) {
+ mLauncherApps.startShortcut(packageName, id, sourceBounds,
+ startActivityOptions, user.getUser());
+ }
+ }
+
+ @TargetApi(25)
+ public Drawable getShortcutIconDrawable(ShortcutInfoCompat shortcutInfo, int density) {
+ return Utilities.isNycMR1OrAbove()
+ ? mLauncherApps.getShortcutIconDrawable(shortcutInfo.getShortcutInfo(), density)
+ : null;
}
/**
*/
public List<ShortcutInfoCompat> queryForPinnedShortcuts(String packageName,
UserHandleCompat user) {
- return query(ShortcutQuery.FLAG_GET_PINNED, packageName, null, null, user);
+ return query(FLAG_MATCH_PINNED, packageName, null, null, user);
}
public List<ShortcutInfoCompat> queryForAllShortcuts(UserHandleCompat user) {
*
* TODO: Use the cache to optimize this so we don't make an RPC every time.
*/
+ @TargetApi(25)
private List<ShortcutInfoCompat> query(int flags, String packageName,
ComponentName activity, List<String> shortcutIds, UserHandleCompat user) {
- ShortcutQuery q = new ShortcutQuery();
- q.setQueryFlags(flags);
- if (packageName != null) {
- q.setPackage(packageName);
- q.setActivity(activity);
- q.setShortcutIds(shortcutIds);
+ if (Utilities.isNycMR1OrAbove()) {
+ ShortcutQuery q = new ShortcutQuery();
+ q.setQueryFlags(flags);
+ if (packageName != null) {
+ q.setPackage(packageName);
+ q.setActivity(activity);
+ q.setShortcutIds(shortcutIds);
+ }
+ List<ShortcutInfo> shortcutInfos = mLauncherApps.getShortcuts(q, user.getUser());
+ if (shortcutInfos == null) {
+ return Collections.EMPTY_LIST;
+ }
+ List<ShortcutInfoCompat> shortcutInfoCompats = new ArrayList<>(shortcutInfos.size());
+ for (ShortcutInfo shortcutInfo : shortcutInfos) {
+ shortcutInfoCompats.add(new ShortcutInfoCompat(shortcutInfo));
+ }
+ return shortcutInfoCompats;
+ } else {
+ return Collections.EMPTY_LIST;
}
- return mLauncherApps.getShortcuts(q, user);
}
}