Merge "Import translations. DO NOT MERGE" into jb-ub-now-indigo-rose
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c6263fb..901b638 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -26,13 +26,13 @@
         android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
         android:protectionLevel="system|signature" />
     <permission
-        android:name="com.android.launcher3.permission.INSTALL_SHORTCUT"
+        android:name="com.android.launcher.permission.INSTALL_SHORTCUT"
         android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
         android:protectionLevel="dangerous"
         android:label="@string/permlab_install_shortcut"
         android:description="@string/permdesc_install_shortcut" />
     <permission
-        android:name="com.android.launcher3.permission.UNINSTALL_SHORTCUT"
+        android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"
         android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
         android:protectionLevel="dangerous"
         android:label="@string/permlab_uninstall_shortcut"
diff --git a/src/com/android/launcher3/InstallShortcutReceiver.java b/src/com/android/launcher3/InstallShortcutReceiver.java
index b31f45d..fd58008 100644
--- a/src/com/android/launcher3/InstallShortcutReceiver.java
+++ b/src/com/android/launcher3/InstallShortcutReceiver.java
@@ -37,7 +37,7 @@
 
 public class InstallShortcutReceiver extends BroadcastReceiver {
     public static final String ACTION_INSTALL_SHORTCUT =
-            "com.android.launcher3.action.INSTALL_SHORTCUT";
+            "com.android.launcher.action.INSTALL_SHORTCUT";
 
     public static final String DATA_INTENT_KEY = "intent.data";
     public static final String LAUNCH_INTENT_KEY = "intent.launch";
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 84d5a09..102f4c2 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -209,7 +209,8 @@
     private static int sScreen = DEFAULT_SCREEN;
 
     // How long to wait before the new-shortcut animation automatically pans the workspace
-    private static int NEW_APPS_ANIMATION_INACTIVE_TIMEOUT_SECONDS = 10;
+    private static int NEW_APPS_PAGE_MOVE_DELAY = 500;
+    private static int NEW_APPS_ANIMATION_INACTIVE_TIMEOUT_SECONDS = 5;
     private static int NEW_APPS_ANIMATION_DELAY = 500;
 
     private final BroadcastReceiver mCloseSystemDialogsReceiver
@@ -3694,20 +3695,23 @@
             // Animate to the correct page
             if (newShortcutsScreenId > -1) {
                 long currentScreenId = mWorkspace.getScreenIdForPageIndex(mWorkspace.getNextPage());
-                int newScreenIndex = mWorkspace.getPageIndexForScreenId(newShortcutsScreenId);
+                final int newScreenIndex = mWorkspace.getPageIndexForScreenId(newShortcutsScreenId);
                 if (newShortcutsScreenId != currentScreenId) {
-                    mWorkspace.snapToPage(newScreenIndex);
+                    // We post the animation slightly delayed to prevent slowdowns
+                    // when we are loading right after we return to launcher.
+                    mWorkspace.postDelayed(new Runnable() {
+                        public void run() {
+                            mWorkspace.snapToPage(newScreenIndex);
+                            mWorkspace.postDelayed(new Runnable() {
+                                public void run() {
+                                    anim.playTogether(bounceAnims);
+                                    anim.start();
+                                }
+                            }, NEW_APPS_ANIMATION_DELAY);
+                        }
+                    }, NEW_APPS_PAGE_MOVE_DELAY);
                 }
             }
-
-            // We post the animation slightly delayed to prevent slowdowns when we are loading
-            // right after we return to launcher.
-            mWorkspace.postDelayed(new Runnable() {
-                public void run() {
-                    anim.playTogether(bounceAnims);
-                    anim.start();
-                }
-            }, NEW_APPS_ANIMATION_DELAY);
         }
         workspace.requestLayout();
     }
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 1d264aa..eead085 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -281,14 +281,14 @@
         return null;
     }
 
-    public void addAndBindAddedApps(final Context context, final ArrayList<ItemInfo> added,
-                                    final ArrayList<AppInfo> addedApps) {
+    public void addAndBindAddedApps(final Context context, final ArrayList<ItemInfo> workspaceApps,
+                                    final ArrayList<AppInfo> allAppsApps) {
         Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
-        addAndBindAddedApps(context, added, cb, addedApps);
+        addAndBindAddedApps(context, workspaceApps, cb, allAppsApps);
     }
-    public void addAndBindAddedApps(final Context context, final ArrayList<ItemInfo> added,
-                                    final Callbacks callbacks, final ArrayList<AppInfo> addedApps) {
-        if (added.isEmpty()) {
+    public void addAndBindAddedApps(final Context context, final ArrayList<ItemInfo> workspaceApps,
+                                    final Callbacks callbacks, final ArrayList<AppInfo> allAppsApps) {
+        if (workspaceApps.isEmpty() && allAppsApps.isEmpty()) {
             return;
         }
         // Process the newly added applications and add them to the database first
@@ -308,7 +308,7 @@
                 }
 
                 synchronized(sBgLock) {
-                    Iterator<ItemInfo> iter = added.iterator();
+                    Iterator<ItemInfo> iter = workspaceApps.iterator();
                     while (iter.hasNext()) {
                         ItemInfo a = iter.next();
                         final String name = a.title.toString();
@@ -356,6 +356,7 @@
                         } else {
                             throw new RuntimeException("Unexpected info type");
                         }
+
                         // Add the shortcut to the db
                         addItemToDatabase(context, shortcutInfo,
                                 LauncherSettings.Favorites.CONTAINER_DESKTOP,
@@ -368,24 +369,26 @@
                 // Update the workspace screens
                 updateWorkspaceScreenOrder(context, workspaceScreens);
 
-                if (!addedShortcutsFinal.isEmpty()) {
+                if (!addedShortcutsFinal.isEmpty() || !allAppsApps.isEmpty()) {
                     runOnMainThread(new Runnable() {
                         public void run() {
                             Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
                             if (callbacks == cb && cb != null) {
-                                ItemInfo info = addedShortcutsFinal.get(addedShortcutsFinal.size() - 1);
-                                long lastScreenId = info.screenId;
                                 final ArrayList<ItemInfo> addAnimated = new ArrayList<ItemInfo>();
                                 final ArrayList<ItemInfo> addNotAnimated = new ArrayList<ItemInfo>();
-                                for (ItemInfo i : addedShortcutsFinal) {
-                                    if (i.screenId == lastScreenId) {
-                                        addAnimated.add(i);
-                                    } else {
-                                        addNotAnimated.add(i);
+                                if (!addedShortcutsFinal.isEmpty()) {
+                                    ItemInfo info = addedShortcutsFinal.get(addedShortcutsFinal.size() - 1);
+                                    long lastScreenId = info.screenId;
+                                    for (ItemInfo i : addedShortcutsFinal) {
+                                        if (i.screenId == lastScreenId) {
+                                            addAnimated.add(i);
+                                        } else {
+                                            addNotAnimated.add(i);
+                                        }
                                     }
                                 }
                                 callbacks.bindAppsAdded(addedWorkspaceScreensFinal,
-                                        addNotAnimated, addAnimated, addedApps);
+                                        addNotAnimated, addAnimated, allAppsApps);
                             }
                         }
                     });
@@ -2514,9 +2517,13 @@
 
             if (added != null) {
                 // Ensure that we add all the workspace applications to the db
-                final ArrayList<ItemInfo> addedInfos = new ArrayList<ItemInfo>(added);
                 Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
-                addAndBindAddedApps(context, addedInfos, cb, added);
+                if (!AppsCustomizePagedView.DISABLE_ALL_APPS) {
+                    addAndBindAddedApps(context, new ArrayList<ItemInfo>(), cb, added);
+                } else {
+                    final ArrayList<ItemInfo> addedInfos = new ArrayList<ItemInfo>(added);
+                    addAndBindAddedApps(context, addedInfos, cb, added);
+                }
             }
             if (modified != null) {
                 final ArrayList<AppInfo> modifiedFinal = modified;
diff --git a/src/com/android/launcher3/LiveWallpaperListAdapter.java b/src/com/android/launcher3/LiveWallpaperListAdapter.java
index 9d0f48b..e9e5e79 100644
--- a/src/com/android/launcher3/LiveWallpaperListAdapter.java
+++ b/src/com/android/launcher3/LiveWallpaperListAdapter.java
@@ -116,6 +116,7 @@
             mThumbnail = thumbnail;
             mInfo = info;
         }
+        @Override
         public void onClick(WallpaperPickerActivity a) {
             Intent preview = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
             preview.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,
diff --git a/src/com/android/launcher3/SavedWallpaperImages.java b/src/com/android/launcher3/SavedWallpaperImages.java
index f00f62f..7cd82f0 100644
--- a/src/com/android/launcher3/SavedWallpaperImages.java
+++ b/src/com/android/launcher3/SavedWallpaperImages.java
@@ -57,6 +57,7 @@
             mDbId = dbId;
             mThumb = thumb;
         }
+        @Override
         public void onClick(WallpaperPickerActivity a) {
             String imageFilename = a.getSavedImages().getImageFilename(mDbId);
             File file = new File(a.getFilesDir(), imageFilename);
@@ -65,14 +66,17 @@
             v.moveToLeft();
             v.setTouchEnabled(false);
         }
+        @Override
         public void onSave(WallpaperPickerActivity a) {
             boolean finishActivityWhenDone = true;
             String imageFilename = a.getSavedImages().getImageFilename(mDbId);
             a.setWallpaper(imageFilename, finishActivityWhenDone);
         }
+        @Override
         public void onDelete(WallpaperPickerActivity a) {
             a.getSavedImages().deleteImage(mDbId);
         }
+        @Override
         public boolean isSelectable() {
             return true;
         }
diff --git a/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java b/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java
index ab2f5d7..7ed1c1b 100644
--- a/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java
+++ b/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java
@@ -46,6 +46,7 @@
         public ThirdPartyWallpaperTile(ResolveInfo resolveInfo) {
             mResolveInfo = resolveInfo;
         }
+        @Override
         public void onClick(WallpaperPickerActivity a) {
             final ComponentName itemComponentName = new ComponentName(
                     mResolveInfo.activityInfo.packageName, mResolveInfo.activityInfo.name);
diff --git a/src/com/android/launcher3/UninstallShortcutReceiver.java b/src/com/android/launcher3/UninstallShortcutReceiver.java
index d92963a..00fa631 100644
--- a/src/com/android/launcher3/UninstallShortcutReceiver.java
+++ b/src/com/android/launcher3/UninstallShortcutReceiver.java
@@ -30,7 +30,7 @@
 
 public class UninstallShortcutReceiver extends BroadcastReceiver {
     private static final String ACTION_UNINSTALL_SHORTCUT =
-            "com.android.launcher3.action.UNINSTALL_SHORTCUT";
+            "com.android.launcher.action.UNINSTALL_SHORTCUT";
 
     // The set of shortcuts that are pending uninstall
     private static ArrayList<PendingUninstallShortcutInfo> mUninstallQueue =
diff --git a/src/com/android/launcher3/WallpaperPickerActivity.java b/src/com/android/launcher3/WallpaperPickerActivity.java
index 5f35cde..7f82a2f 100644
--- a/src/com/android/launcher3/WallpaperPickerActivity.java
+++ b/src/com/android/launcher3/WallpaperPickerActivity.java
@@ -87,11 +87,12 @@
     public static abstract class WallpaperTileInfo {
         public void onClick(WallpaperPickerActivity a) {}
         public void onSave(WallpaperPickerActivity a) {}
-        public void onDelete() {}
+        public void onDelete(WallpaperPickerActivity a) {}
         public boolean isSelectable() { return false; }
     }
 
     public static class PickImageInfo extends WallpaperTileInfo {
+        @Override
         public void onClick(WallpaperPickerActivity a) {
             Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
             intent.setType("image/*");
@@ -104,13 +105,14 @@
         public UriWallpaperInfo(Uri uri) {
             mUri = uri;
         }
+        @Override
         public void onClick(WallpaperPickerActivity a) {
             CropView v = a.getCropView();
             v.setTileSource(new BitmapRegionTileSource(
                     a, mUri, 1024, 0), null);
             v.setTouchEnabled(true);
         }
-
+        @Override
         public void onSave(final WallpaperPickerActivity a) {
             boolean finishActivityWhenDone = true;
             OnBitmapCroppedHandler h = new OnBitmapCroppedHandler() {
@@ -123,6 +125,7 @@
             };
             a.cropImageAndSetWallpaper(mUri, h, finishActivityWhenDone);
         }
+        @Override
         public boolean isSelectable() {
             return true;
         }
@@ -138,6 +141,7 @@
             mResId = resId;
             mThumb = thumb;
         }
+        @Override
         public void onClick(WallpaperPickerActivity a) {
             BitmapRegionTileSource source = new BitmapRegionTileSource(
                     mResources, a, mResId, 1024, 0);
@@ -151,10 +155,12 @@
             v.setScale(wallpaperSize.x / crop.width());
             v.setTouchEnabled(false);
         }
+        @Override
         public void onSave(WallpaperPickerActivity a) {
             boolean finishActivityWhenDone = true;
             a.cropImageAndSetWallpaper(mResources, mResId, finishActivityWhenDone);
         }
+        @Override
         public boolean isSelectable() {
             return true;
         }
@@ -211,11 +217,11 @@
                     return;
                 }
                 WallpaperTileInfo info = (WallpaperTileInfo) v.getTag();
-                if (mSelectedThumb != null) {
-                    mSelectedThumb.setSelected(false);
-                    mSelectedThumb = null;
-                }
                 if (info.isSelectable()) {
+                    if (mSelectedThumb != null) {
+                        mSelectedThumb.setSelected(false);
+                        mSelectedThumb = null;
+                    }
                     mSelectedThumb = v;
                     v.setSelected(true);
                 }
@@ -307,8 +313,10 @@
                 new View.OnClickListener() {
                     @Override
                     public void onClick(View v) {
-                        WallpaperTileInfo info = (WallpaperTileInfo) mSelectedThumb.getTag();
-                        info.onSave(WallpaperPickerActivity.this);
+                        if (mSelectedThumb != null) {
+                            WallpaperTileInfo info = (WallpaperTileInfo) mSelectedThumb.getTag();
+                            info.onSave(WallpaperPickerActivity.this);
+                        }
                     }
                 });
 
@@ -361,7 +369,8 @@
                         CheckableFrameLayout c =
                                 (CheckableFrameLayout) mWallpapersView.getChildAt(i);
                         if (c.isChecked()) {
-                            ((WallpaperTileInfo) c.getTag()).onDelete();
+                            WallpaperTileInfo info = (WallpaperTileInfo) c.getTag();
+                            info.onDelete(WallpaperPickerActivity.this);
                             viewsToRemove.add(c);
                         }
                     }