summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2017-09-29 14:54:37 (GMT)
committerSunny Goyal <sunnygoyal@google.com>2017-09-29 14:55:25 (GMT)
commit6b0aa870b821b5531f6eec782542a2b1e0f2c0ee (patch)
tree1d4d5bf59a4d6230436f2c7bd0b4c799635a9d6d
parent510fdfbcea6bc6bf76e29a67fef106b78e8b0d89 (diff)
downloadandroid_packages_apps_Trebuchet-6b0aa870b821b5531f6eec782542a2b1e0f2c0ee.zip
android_packages_apps_Trebuchet-6b0aa870b821b5531f6eec782542a2b1e0f2c0ee.tar.gz
android_packages_apps_Trebuchet-6b0aa870b821b5531f6eec782542a2b1e0f2c0ee.tar.bz2
Caching system app flag to avoid unnecessary system calls
when scrolling Bug: 65493000 Change-Id: If60ec6dec23e7efa1031d72e76775fa2449bcd7b
-rw-r--r--src/com/android/launcher3/AppInfo.java15
-rw-r--r--src/com/android/launcher3/UninstallDropTarget.java18
2 files changed, 29 insertions, 4 deletions
diff --git a/src/com/android/launcher3/AppInfo.java b/src/com/android/launcher3/AppInfo.java
index 3da1996..7d2f753 100644
--- a/src/com/android/launcher3/AppInfo.java
+++ b/src/com/android/launcher3/AppInfo.java
@@ -19,6 +19,7 @@ package com.android.launcher3;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.ApplicationInfo;
import android.content.pm.LauncherActivityInfo;
import android.os.UserHandle;
@@ -31,6 +32,10 @@ import com.android.launcher3.util.PackageManagerHelper;
*/
public class AppInfo extends ItemInfoWithIcon {
+ public static final int FLAG_SYSTEM_UNKNOWN = 0;
+ public static final int FLAG_SYSTEM_YES = 1 << 0;
+ public static final int FLAG_SYSTEM_NO = 1 << 1;
+
/**
* The intent used to start the application.
*/
@@ -43,6 +48,11 @@ public class AppInfo extends ItemInfoWithIcon {
*/
public int isDisabled = ShortcutInfo.DEFAULT;
+ /**
+ * Stores if the app is a system app or not.
+ */
+ public int isSystemApp;
+
public AppInfo() {
itemType = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
}
@@ -71,6 +81,10 @@ public class AppInfo extends ItemInfoWithIcon {
}
intent = makeLaunchIntent(info);
+
+ isSystemApp = (info.getApplicationInfo().flags & ApplicationInfo.FLAG_SYSTEM) == 0
+ ? FLAG_SYSTEM_NO : FLAG_SYSTEM_YES;
+
}
public AppInfo(AppInfo info) {
@@ -79,6 +93,7 @@ public class AppInfo extends ItemInfoWithIcon {
title = Utilities.trim(info.title);
intent = new Intent(info.intent);
isDisabled = info.isDisabled;
+ isSystemApp = info.isSystemApp;
}
@Override
diff --git a/src/com/android/launcher3/UninstallDropTarget.java b/src/com/android/launcher3/UninstallDropTarget.java
index 84d6a9b..902fd34 100644
--- a/src/com/android/launcher3/UninstallDropTarget.java
+++ b/src/com/android/launcher3/UninstallDropTarget.java
@@ -21,6 +21,7 @@ import java.net.URISyntaxException;
public class UninstallDropTarget extends ButtonDropTarget {
private static final String TAG = "UninstallDropTarget";
+ private static Boolean sUninstallDisabled;
public UninstallDropTarget(Context context, AttributeSet attrs) {
this(context, attrs, 0);
@@ -48,13 +49,22 @@ public class UninstallDropTarget extends ButtonDropTarget {
}
public static boolean supportsDrop(Context context, ItemInfo info) {
- UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
- Bundle restrictions = userManager.getUserRestrictions();
- if (restrictions.getBoolean(UserManager.DISALLOW_APPS_CONTROL, false)
- || restrictions.getBoolean(UserManager.DISALLOW_UNINSTALL_APPS, false)) {
+ if (sUninstallDisabled == null) {
+ UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
+ Bundle restrictions = userManager.getUserRestrictions();
+ sUninstallDisabled = restrictions.getBoolean(UserManager.DISALLOW_APPS_CONTROL, false)
+ || restrictions.getBoolean(UserManager.DISALLOW_UNINSTALL_APPS, false);
+ }
+ if (sUninstallDisabled) {
return false;
}
+ if (info instanceof AppInfo) {
+ AppInfo appInfo = (AppInfo) info;
+ if (appInfo.isSystemApp != AppInfo.FLAG_SYSTEM_UNKNOWN) {
+ return (appInfo.isSystemApp & AppInfo.FLAG_SYSTEM_NO) != 0;
+ }
+ }
return getUninstallTarget(context, info) != null;
}