diff --git a/res/values/strings.xml b/res/values/strings.xml
index ff3509bc51..dd9b170f31 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -40,6 +40,8 @@
App isn\'t installed.
+
+ App isn\'t available
Downloaded app disabled in Safe mode
diff --git a/src/com/android/launcher3/AllAppsList.java b/src/com/android/launcher3/AllAppsList.java
index ac9a1250ed..72c6693b31 100644
--- a/src/com/android/launcher3/AllAppsList.java
+++ b/src/com/android/launcher3/AllAppsList.java
@@ -105,7 +105,7 @@ class AllAppsList {
/**
* Remove the apps for the given apk identified by packageName.
*/
- public void removePackage(String packageName, UserHandleCompat user) {
+ public void removePackage(String packageName, UserHandleCompat user, boolean clearCache) {
final List data = this.data;
for (int i = data.size() - 1; i >= 0; i--) {
AppInfo info = data.get(i);
@@ -115,7 +115,9 @@ class AllAppsList {
data.remove(i);
}
}
- mIconCache.remove(packageName, user);
+ if (clearCache) {
+ mIconCache.remove(packageName, user);
+ }
}
/**
diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java
index 73c7831f9c..07f3045a5b 100644
--- a/src/com/android/launcher3/BubbleTextView.java
+++ b/src/com/android/launcher3/BubbleTextView.java
@@ -122,7 +122,7 @@ public class BubbleTextView extends TextView {
LauncherAppState app = LauncherAppState.getInstance();
FastBitmapDrawable iconDrawable = Utilities.createIconDrawable(b);
- iconDrawable.setGhostModeEnabled(info.isDisabled);
+ iconDrawable.setGhostModeEnabled(info.isDisabled != 0);
setCompoundDrawables(null, iconDrawable, null, null);
if (setDefaultPadding) {
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 24e2d6a0bb..6ead231232 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -2590,6 +2590,16 @@ public class Launcher extends Activity
// Open shortcut
final ShortcutInfo shortcut = (ShortcutInfo) tag;
+
+ if (shortcut.isDisabled != 0) {
+ int error = R.string.activity_not_available;
+ if ((shortcut.isDisabled & ShortcutInfo.FLAG_DISABLED_SAFEMODE) != 0) {
+ error = R.string.safemode_shortcut_error;
+ }
+ Toast.makeText(this, error, Toast.LENGTH_SHORT).show();
+ return;
+ }
+
final Intent intent = shortcut.intent;
// Check for special shortcuts
@@ -4766,24 +4776,30 @@ public class Launcher extends Activity
* we only remove specific components from the workspace, where as
* package-removal should clear all items by package name.
*
+ * @param reason if non-zero, the icons are not permanently removed, rather marked as disabled.
* Implementation of the method from LauncherModel.Callbacks.
*/
+ @Override
public void bindComponentsRemoved(final ArrayList packageNames,
- final ArrayList appInfos, final UserHandleCompat user) {
+ final ArrayList appInfos, final UserHandleCompat user, final int reason) {
Runnable r = new Runnable() {
public void run() {
- bindComponentsRemoved(packageNames, appInfos, user);
+ bindComponentsRemoved(packageNames, appInfos, user, reason);
}
};
if (waitUntilResume(r)) {
return;
}
- if (!packageNames.isEmpty()) {
- mWorkspace.removeItemsByPackageName(packageNames, user);
- }
- if (!appInfos.isEmpty()) {
- mWorkspace.removeItemsByApplicationInfo(appInfos, user);
+ if (reason == 0) {
+ if (!packageNames.isEmpty()) {
+ mWorkspace.removeItemsByPackageName(packageNames, user);
+ }
+ if (!appInfos.isEmpty()) {
+ mWorkspace.removeItemsByApplicationInfo(appInfos, user);
+ }
+ } else {
+ mWorkspace.disableShortcutsByPackageName(packageNames, user, reason);
}
// Notify the drag controller
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index eb4210f385..0b7ee2e1fa 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -202,7 +202,7 @@ public class LauncherModel extends BroadcastReceiver
public void updatePackageState(ArrayList installInfo);
public void updatePackageBadge(String packageName);
public void bindComponentsRemoved(ArrayList packageNames,
- ArrayList appInfos, UserHandleCompat user);
+ ArrayList appInfos, UserHandleCompat user, int reason);
public void bindPackagesUpdated(ArrayList