Merge "Launcher3: fix app shortcuts for suspended apps" into ub-launcher3-master

This commit is contained in:
TreeHugger Robot
2017-02-21 20:33:33 +00:00
committed by Android (Google) Code Review
6 changed files with 40 additions and 3 deletions
+5 -2
View File
@@ -26,7 +26,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Handler;
import android.os.HandlerThread;
@@ -85,7 +84,6 @@ import com.android.launcher3.util.ViewOnDrawExecutor;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.lang.ref.WeakReference;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -1034,6 +1032,11 @@ public class LauncherModel extends BroadcastReceiver
info = new ShortcutInfo(pinnedShortcut, context);
info.iconBitmap = LauncherIcons
.createShortcutIcon(pinnedShortcut, context);
if (pmHelper.isAppSuspended(
info.getTargetComponent().getPackageName(),
info.user)) {
info.isDisabled |= ShortcutInfo.FLAG_DISABLED_SUSPENDED;
}
intent = info.intent;
} else {
// Create a shortcut info in disabled mode for now.
@@ -19,6 +19,7 @@ package com.android.launcher3.compat;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.LauncherActivityInfo;
import android.graphics.Rect;
import android.os.Bundle;
@@ -72,6 +73,7 @@ public abstract class LauncherAppsCompat {
UserHandle user);
public abstract void startActivityForProfile(ComponentName component, UserHandle user,
Rect sourceBounds, Bundle opts);
public abstract ApplicationInfo getApplicationInfo(String packageName, UserHandle user);
public abstract void showAppDetailsForProfile(ComponentName component, UserHandle user);
public abstract void addOnAppsChangedCallback(OnAppsChangedCallbackCompat listener);
public abstract void removeOnAppsChangedCallback(OnAppsChangedCallbackCompat listener);
@@ -19,6 +19,7 @@ package com.android.launcher3.compat;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.LauncherApps;
import android.content.pm.PackageManager;
@@ -64,6 +65,12 @@ public class LauncherAppsCompatVL extends LauncherAppsCompat {
mLauncherApps.startMainActivity(component, user, sourceBounds, opts);
}
@Override
public ApplicationInfo getApplicationInfo(String packageName, UserHandle user) {
List<LauncherActivityInfo> activityList = mLauncherApps.getActivityList(packageName, user);
return activityList.size() > 0 ? activityList.get(0).getApplicationInfo() : null;
}
@Override
public void showAppDetailsForProfile(ComponentName component, UserHandle user) {
mLauncherApps.startAppDetailsActivity(component, user, null, null);
@@ -17,6 +17,7 @@
package com.android.launcher3.compat;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.LauncherApps;
import android.os.UserHandle;
@@ -33,6 +34,11 @@ public class LauncherAppsCompatVO extends LauncherAppsCompatVL {
super(context);
}
@Override
public ApplicationInfo getApplicationInfo(String packageName, UserHandle user) {
return mLauncherApps.getApplicationInfo(packageName, 0, user);
}
@Override
public List<ShortcutConfigActivityInfo> getCustomShortcutActivityList() {
List<ShortcutConfigActivityInfo> result = new ArrayList<>();
@@ -65,7 +65,8 @@ public class DeepShortcutManager {
}
public static boolean supportsShortcuts(ItemInfo info) {
return info.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
return info.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION
&& !info.isDisabled();
}
public boolean wasLastCallSuccess() {
@@ -71,6 +71,10 @@ public class PackageManagerHelper {
}
}
/**
* Returns whether a package is suspended for the current user as per
* {@link android.app.admin.DevicePolicyManager#isPackageSuspended}.
*/
public boolean isAppSuspended(String packageName) {
try {
ApplicationInfo info = mPm.getApplicationInfo(packageName, 0);
@@ -80,6 +84,16 @@ public class PackageManagerHelper {
}
}
/**
* Returns whether the target app is suspended for a given user as per
* {@link android.app.admin.DevicePolicyManager#isPackageSuspended}.
*/
public boolean isAppSuspended(String packageName, UserHandle user) {
ApplicationInfo info =
LauncherAppsCompat.getInstance(mContext).getApplicationInfo(packageName, user);
return info != null && isAppSuspended(info);
}
public boolean isSafeMode() {
return mPm.isSafeMode();
}
@@ -91,6 +105,10 @@ public class PackageManagerHelper {
AppInfo.makeLaunchIntent(mContext, activities.get(0), user);
}
/**
* Returns whether an application is suspended as per
* {@link android.app.admin.DevicePolicyManager#isPackageSuspended}.
*/
public static boolean isAppSuspended(ApplicationInfo info) {
// The value of FLAG_SUSPENDED was reused by a hidden constant
// ApplicationInfo.FLAG_PRIVILEGED prior to N, so only check for suspended flag on N