Fix 3385675: Uninstall option available for system app

- when a system app is selected in all apps, don't show uninstall button
- if it's an updated system app, show "Uninstall update"
- Also, remove unused code for non-existent flag for games

Change-Id: I46753ee8d213b2ba1613b71ac1fe73d79786129c
diff --git a/src/com/android/launcher2/AllApps2D.java b/src/com/android/launcher2/AllApps2D.java
index a9423be..1cbb999 100644
--- a/src/com/android/launcher2/AllApps2D.java
+++ b/src/com/android/launcher2/AllApps2D.java
@@ -313,19 +313,9 @@
         mVisibleAppsList.clear();
         if (appType == AppType.ALL) {
             mVisibleAppsList.addAll(mAllAppsList);
-        } else {
-            int searchFlags = 0;
-
-            if (appType == AppType.APP) {
-                searchFlags = ApplicationInfo.APP_FLAG;
-            } else if (appType == AppType.GAME) {
-                searchFlags = ApplicationInfo.GAME_FLAG;
-            } else if (appType == AppType.DOWNLOADED) {
-                searchFlags = ApplicationInfo.DOWNLOADED_FLAG;
-            }
-
+        } else if (appType == AppType.DOWNLOADED) {
             for (ApplicationInfo info : mAllAppsList) {
-                if ((info.flags & searchFlags) != 0) {
+                if ((info.flags & ApplicationInfo.DOWNLOADED_FLAG) != 0) {
                     mVisibleAppsList.add(info);
                 }
             }
diff --git a/src/com/android/launcher2/AllAppsPagedView.java b/src/com/android/launcher2/AllAppsPagedView.java
index bfe6ec1..4158b4a 100644
--- a/src/com/android/launcher2/AllAppsPagedView.java
+++ b/src/com/android/launcher2/AllAppsPagedView.java
@@ -203,11 +203,21 @@
         }
     }
 
-    private void setupDragMode() {
+    private void setupDragMode(ApplicationInfo info) {
         mLauncher.getWorkspace().shrink(Workspace.ShrinkState.BOTTOM_VISIBLE);
-        DeleteZone allAppsDeleteZone = (DeleteZone)
-                mLauncher.findViewById(R.id.all_apps_delete_zone);
-        allAppsDeleteZone.setDragAndDropEnabled(true);
+
+        // Only show the uninstall button if the app is uninstallable.
+        if ((info.flags & ApplicationInfo.DOWNLOADED_FLAG) != 0) {
+            DeleteZone allAppsDeleteZone = (DeleteZone)
+                    mLauncher.findViewById(R.id.all_apps_delete_zone);
+            allAppsDeleteZone.setDragAndDropEnabled(true);
+
+            if ((info.flags & ApplicationInfo.UPDATED_SYSTEM_APP_FLAG) != 0) {
+                allAppsDeleteZone.setText(R.string.delete_zone_label_all_apps_system_app);
+            } else {
+                allAppsDeleteZone.setText(R.string.delete_zone_label_all_apps);
+            }
+        }
 
         ApplicationInfoDropTarget allAppsInfoButton =
                 (ApplicationInfoDropTarget) mLauncher.findViewById(R.id.all_apps_info_target);
@@ -240,12 +250,12 @@
         if (!v.isInTouchMode()) return false;
         if (!super.beginDragging(v)) return false;
 
-        // Start drag mode after the item is selected
-        setupDragMode();
-
         ApplicationInfo app = (ApplicationInfo) v.getTag();
         app = new ApplicationInfo(app);
 
+        // Start drag mode after the item is selected
+        setupDragMode(app);
+
         // get icon (top compound drawable, index is 1)
         final TextView tv = (TextView) v;
         final Drawable icon = tv.getCompoundDrawables()[1];
diff --git a/src/com/android/launcher2/ApplicationInfo.java b/src/com/android/launcher2/ApplicationInfo.java
index 3adea37..1d948b7 100644
--- a/src/com/android/launcher2/ApplicationInfo.java
+++ b/src/com/android/launcher2/ApplicationInfo.java
@@ -59,9 +59,9 @@
 
     ComponentName componentName;
 
-    static final int APP_FLAG = 1;
-    static final int GAME_FLAG = 2;
-    static final int DOWNLOADED_FLAG = 4;
+    static final int DOWNLOADED_FLAG = 1;
+    static final int UPDATED_SYSTEM_APP_FLAG = 2;
+
     int flags = 0;
 
     ApplicationInfo() {
@@ -83,17 +83,12 @@
             int appFlags = pm.getApplicationInfo(packageName, 0).flags;
             if ((appFlags & android.content.pm.ApplicationInfo.FLAG_SYSTEM) == 0) {
                 flags |= DOWNLOADED_FLAG;
-            }
-            if ((appFlags & android.content.pm.ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
-                flags |= DOWNLOADED_FLAG;
+
+                if ((appFlags & android.content.pm.ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
+                    flags |= UPDATED_SYSTEM_APP_FLAG;
+                }
             }
             firstInstallTime = pm.getPackageInfo(packageName, 0).firstInstallTime;
-            // TODO: Figure out how to determine what is a game
-
-            // If it's not a game, it's an app
-            if ((flags & GAME_FLAG) == 0) {
-                flags |= APP_FLAG;
-            }
         } catch (NameNotFoundException e) {
             Log.d(TAG, "PackageManager.getApplicationInfo failed for " + packageName);
         }
diff --git a/src/com/android/launcher2/BubbleTextView.java b/src/com/android/launcher2/BubbleTextView.java
index 203883e..f708e2f 100644
--- a/src/com/android/launcher2/BubbleTextView.java
+++ b/src/com/android/launcher2/BubbleTextView.java
@@ -171,9 +171,8 @@
     }
 
     /**
-     * Draw the View v into the given Canvas.
+     * Draw this BubbleTextView into the given Canvas.
      *
-     * @param v the view to draw
      * @param destCanvas the canvas to draw on
      * @param padding the horizontal and vertical padding to use when drawing
      */