summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/launcher3/Launcher.java4
-rw-r--r--src/com/android/launcher3/LauncherModel.java6
-rw-r--r--src/com/android/launcher3/ShortcutInfo.java12
-rw-r--r--src/com/android/launcher3/Utilities.java40
-rw-r--r--src/com/android/launcher3/compat/LauncherAppsCompat.java11
-rw-r--r--src/com/android/launcher3/compat/LauncherAppsCompatV16.java23
-rw-r--r--src/com/android/launcher3/compat/LauncherAppsCompatVNMR1.java123
-rw-r--r--src/com/android/launcher3/shortcuts/DeepShortcutManager.java102
8 files changed, 104 insertions, 217 deletions
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index d25eca0b3..97af37c2e 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -2801,8 +2801,8 @@ public class Launcher extends Activity
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);
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 8e404a74e..1e597d30f 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -1941,8 +1941,8 @@ public class LauncherModel extends BroadcastReceiver
}
}
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);
@@ -3317,7 +3317,7 @@ public class LauncherModel extends BroadcastReceiver
List<ShortcutInfo> shortcutInfos = idsToWorkspaceShortcutInfos
.get(fullDetails.getId());
for (ShortcutInfo shortcutInfo : shortcutInfos) {
- shortcutInfo.updateFromDeepShortcutInfo(fullDetails, context, mLauncherApps);
+ shortcutInfo.updateFromDeepShortcutInfo(fullDetails, context);
updatedShortcutInfos.add(shortcutInfo);
}
}
diff --git a/src/com/android/launcher3/ShortcutInfo.java b/src/com/android/launcher3/ShortcutInfo.java
index 63f49e0d5..3756ba1b3 100644
--- a/src/com/android/launcher3/ShortcutInfo.java
+++ b/src/com/android/launcher3/ShortcutInfo.java
@@ -282,18 +282,17 @@ public class ShortcutInfo extends ItemInfo {
*/
@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();
@@ -304,8 +303,9 @@ public class ShortcutInfo extends ItemInfo {
.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));
diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java
index 0306d573b..8b42debcf 100644
--- a/src/com/android/launcher3/Utilities.java
+++ b/src/com/android/launcher3/Utilities.java
@@ -44,8 +44,10 @@ import android.graphics.drawable.BitmapDrawable;
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;
@@ -100,6 +102,12 @@ public final class Utilities {
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;
@@ -342,35 +350,27 @@ public final class Utilities {
*/
public static float getDescendantCoordRelativeToAncestor(
View descendant, View ancestor, int[] coord, boolean includeRootScroll) {
- ArrayList<View> ancestorChain = new ArrayList<View>();
-
float[] pt = {coord[0], coord[1]};
-
+ float scale = 1.0f;
View v = descendant;
while(v != ancestor && v != null) {
- ancestorChain.add(v);
- v = (View) v.getParent();
- }
-
- float scale = 1.0f;
- int count = ancestorChain.size();
- for (int i = 0; i < count; i++) {
- View v0 = ancestorChain.get(i);
// For TextViews, scroll has a meaning which relates to the text position
// which is very strange... ignore the scroll.
- if (v0 != descendant || includeRootScroll) {
- pt[0] -= v0.getScrollX();
- pt[1] -= v0.getScrollY();
+ if (v != descendant || includeRootScroll) {
+ pt[0] -= v.getScrollX();
+ pt[1] -= v.getScrollY();
}
- v0.getMatrix().mapPoints(pt);
- pt[0] += v0.getLeft();
- pt[1] += v0.getTop();
- scale *= v0.getScaleX();
+ v.getMatrix().mapPoints(pt);
+ pt[0] += v.getLeft();
+ pt[1] += v.getTop();
+ scale *= v.getScaleX();
+
+ v = (View) v.getParent();
}
- coord[0] = (int) Math.round(pt[0]);
- coord[1] = (int) Math.round(pt[1]);
+ coord[0] = Math.round(pt[0]);
+ coord[1] = Math.round(pt[1]);
return scale;
}
diff --git a/src/com/android/launcher3/compat/LauncherAppsCompat.java b/src/com/android/launcher3/compat/LauncherAppsCompat.java
index 338106427..3c1013db4 100644
--- a/src/com/android/launcher3/compat/LauncherAppsCompat.java
+++ b/src/com/android/launcher3/compat/LauncherAppsCompat.java
@@ -61,9 +61,7 @@ public abstract class LauncherAppsCompat {
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());
@@ -86,11 +84,4 @@ public abstract class LauncherAppsCompat {
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);
}
diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatV16.java b/src/com/android/launcher3/compat/LauncherAppsCompatV16.java
index 1a144e859..49a0df676 100644
--- a/src/com/android/launcher3/compat/LauncherAppsCompatV16.java
+++ b/src/com/android/launcher3/compat/LauncherAppsCompatV16.java
@@ -133,29 +133,6 @@ public class LauncherAppsCompatV16 extends LauncherAppsCompat {
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);
}
diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVNMR1.java b/src/com/android/launcher3/compat/LauncherAppsCompatVNMR1.java
deleted file mode 100644
index 0c1db1385..000000000
--- a/src/com/android/launcher3/compat/LauncherAppsCompatVNMR1.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * 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));
- }
- }
-}
-
diff --git a/src/com/android/launcher3/shortcuts/DeepShortcutManager.java b/src/com/android/launcher3/shortcuts/DeepShortcutManager.java
index e2e06af9a..46ca93148 100644
--- a/src/com/android/launcher3/shortcuts/DeepShortcutManager.java
+++ b/src/com/android/launcher3/shortcuts/DeepShortcutManager.java
@@ -19,30 +19,37 @@ package com.android.launcher3.shortcuts;
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) {
@@ -72,26 +79,48 @@ public class DeepShortcutManager {
* 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;
}
/**
@@ -101,7 +130,7 @@ public class DeepShortcutManager {
*/
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) {
@@ -122,15 +151,28 @@ public class DeepShortcutManager {
*
* 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);
}
}