summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/compat
diff options
context:
space:
mode:
authorKenny Guy <kennyguy@google.com>2016-01-21 19:50:02 +0000
committerRubin Xu <rubinxu@google.com>2016-01-25 11:28:06 +0000
commit44cba696386b44f9115cad13ec9ecf67a0ac9119 (patch)
treebc8b35320ed88f134708c85b107680152c199b33 /src/com/android/launcher3/compat
parentf076eae0cab10f035f7b187c72a680cd220acf1b (diff)
downloadandroid_packages_apps_Trebuchet-44cba696386b44f9115cad13ec9ecf67a0ac9119.tar.gz
android_packages_apps_Trebuchet-44cba696386b44f9115cad13ec9ecf67a0ac9119.tar.bz2
android_packages_apps_Trebuchet-44cba696386b44f9115cad13ec9ecf67a0ac9119.zip
Grey out suspended applications.
Grey out application shortcuts and all apps entries for packages that are suspended. Bug: 22776761 Change-Id: I1b63da1816aca1de52b9f9bee62d1b162d0cdf4d
Diffstat (limited to 'src/com/android/launcher3/compat')
-rw-r--r--src/com/android/launcher3/compat/LauncherActivityInfoCompat.java2
-rw-r--r--src/com/android/launcher3/compat/LauncherAppsCompat.java9
-rw-r--r--src/com/android/launcher3/compat/LauncherAppsCompatV16.java4
-rw-r--r--src/com/android/launcher3/compat/LauncherAppsCompatVL.java14
-rw-r--r--src/com/android/launcher3/compat/LauncherAppsCompatVN.java57
5 files changed, 83 insertions, 3 deletions
diff --git a/src/com/android/launcher3/compat/LauncherActivityInfoCompat.java b/src/com/android/launcher3/compat/LauncherActivityInfoCompat.java
index 0bc9588aa..aaf756eda 100644
--- a/src/com/android/launcher3/compat/LauncherActivityInfoCompat.java
+++ b/src/com/android/launcher3/compat/LauncherActivityInfoCompat.java
@@ -24,6 +24,8 @@ import android.graphics.drawable.Drawable;
public abstract class LauncherActivityInfoCompat {
+ public static final int FLAG_SUSPENDED = 1<<30;
+
LauncherActivityInfoCompat() {
}
diff --git a/src/com/android/launcher3/compat/LauncherAppsCompat.java b/src/com/android/launcher3/compat/LauncherAppsCompat.java
index 95e3ba902..da3eb8fee 100644
--- a/src/com/android/launcher3/compat/LauncherAppsCompat.java
+++ b/src/com/android/launcher3/compat/LauncherAppsCompat.java
@@ -42,6 +42,8 @@ public abstract class LauncherAppsCompat {
void onPackageChanged(String packageName, UserHandleCompat user);
void onPackagesAvailable(String[] packageNames, UserHandleCompat user, boolean replacing);
void onPackagesUnavailable(String[] packageNames, UserHandleCompat user, boolean replacing);
+ void onPackagesSuspended(String[] packageNames, UserHandleCompat user);
+ void onPackagesUnsuspended(String[] packageNames, UserHandleCompat user);
}
protected LauncherAppsCompat() {
@@ -53,7 +55,9 @@ public abstract class LauncherAppsCompat {
public static LauncherAppsCompat getInstance(Context context) {
synchronized (sInstanceLock) {
if (sInstance == null) {
- if (Utilities.ATLEAST_LOLLIPOP) {
+ if (Utilities.isNycOrAbove()) {
+ sInstance = new LauncherAppsCompatVN(context.getApplicationContext());
+ } else if (Utilities.ATLEAST_LOLLIPOP) {
sInstance = new LauncherAppsCompatVL(context.getApplicationContext());
} else {
sInstance = new LauncherAppsCompatV16(context.getApplicationContext());
@@ -75,6 +79,7 @@ public abstract class LauncherAppsCompat {
public abstract boolean isPackageEnabledForProfile(String packageName, UserHandleCompat user);
public abstract boolean isActivityEnabledForProfile(ComponentName component,
UserHandleCompat user);
+ public abstract boolean isPackageSuspendedForProfile(String packageName, UserHandleCompat user);
public boolean isAppEnabled(PackageManager pm, String packageName, int flags) {
try {
@@ -84,4 +89,4 @@ public abstract class LauncherAppsCompat {
return false;
}
}
-} \ No newline at end of file
+}
diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatV16.java b/src/com/android/launcher3/compat/LauncherAppsCompatV16.java
index 339c457e1..2d0778d30 100644
--- a/src/com/android/launcher3/compat/LauncherAppsCompatV16.java
+++ b/src/com/android/launcher3/compat/LauncherAppsCompatV16.java
@@ -126,6 +126,10 @@ public class LauncherAppsCompatV16 extends LauncherAppsCompat {
}
}
+ public boolean isPackageSuspendedForProfile(String packageName, UserHandleCompat user) {
+ return false;
+ }
+
private void unregisterForPackageIntents() {
mContext.unregisterReceiver(mPackageMonitor);
}
diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java
index fbf91b548..7270d023b 100644
--- a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java
+++ b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java
@@ -36,7 +36,7 @@ import java.util.Map;
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public class LauncherAppsCompatVL extends LauncherAppsCompat {
- private LauncherApps mLauncherApps;
+ protected LauncherApps mLauncherApps;
private Map<OnAppsChangedCallbackCompat, WrappedCallback> mCallbacks
= new HashMap<OnAppsChangedCallbackCompat, WrappedCallback>();
@@ -106,6 +106,10 @@ public class LauncherAppsCompatVL extends LauncherAppsCompat {
return mLauncherApps.isActivityEnabled(component, user.getUser());
}
+ public boolean isPackageSuspendedForProfile(String packageName, UserHandleCompat user) {
+ return false;
+ }
+
private static class WrappedCallback extends LauncherApps.Callback {
private LauncherAppsCompat.OnAppsChangedCallbackCompat mCallback;
@@ -134,6 +138,14 @@ public class LauncherAppsCompatVL extends LauncherAppsCompat {
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));
+ }
}
}
diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVN.java b/src/com/android/launcher3/compat/LauncherAppsCompatVN.java
new file mode 100644
index 000000000..0d883b6fd
--- /dev/null
+++ b/src/com/android/launcher3/compat/LauncherAppsCompatVN.java
@@ -0,0 +1,57 @@
+/*
+ * 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.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.LauncherApps;
+import android.os.UserHandle;
+import android.util.Log;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+//TODO: Once gogole3 SDK is updated to N, add @TargetApi(Build.VERSION_CODES.N)
+public class LauncherAppsCompatVN extends LauncherAppsCompatVL {
+
+ private static final String TAG = "LauncherAppsCompatVN";
+
+ LauncherAppsCompatVN(Context context) {
+ super(context);
+ }
+
+ @Override
+ public boolean isPackageSuspendedForProfile(String packageName, UserHandleCompat user) {
+ if (user != null && packageName != null) {
+ try {
+ //TODO: Replace with proper API call once google3 SDK is updated.
+ Method getApplicationInfoMethod = LauncherApps.class.getMethod("getApplicationInfo",
+ String.class, int.class, UserHandle.class);
+
+ ApplicationInfo info = (ApplicationInfo) getApplicationInfoMethod.invoke(
+ mLauncherApps, packageName, 0, user.getUser());
+ if (info != null) {
+ return (info.flags & LauncherActivityInfoCompat.FLAG_SUSPENDED) != 0;
+ }
+ } catch (NoSuchMethodError | NoSuchMethodException | IllegalAccessException
+ | IllegalArgumentException | InvocationTargetException e) {
+ Log.e(TAG, "Running on N without getApplicationInfo", e);
+ }
+ }
+ return false;
+ }
+}