OSDN Git Service

Fix 6360834 Select All is shown in place of Deselect all option
authorRay Chen <raychen@google.com>
Thu, 3 May 2012 05:10:51 +0000 (13:10 +0800)
committerRay Chen <raychen@google.com>
Wed, 9 May 2012 01:31:39 +0000 (09:31 +0800)
The CL changes the SelectionManager's toggle method so it changes itself to
inverse selection mode when all items are already selected, and onSelectionModeChange
will be triggered so the listener can update the selection menu (Select all/Deselect all)
and ActionBar.

Change-Id: I570a299cc8fd7d1d5acab948f9c6531a9adde486
b: 6360834

src/com/android/gallery3d/app/AlbumSetPage.java
src/com/android/gallery3d/ui/ActionModeHandler.java
src/com/android/gallery3d/ui/SelectionManager.java

index ec0fd0c..a3000b7 100644 (file)
@@ -545,7 +545,7 @@ public class AlbumSetPage extends ActivityState implements
                 break;
             }
             case SelectionManager.SELECT_ALL_MODE: {
-                mActionModeHandler.setTitle(getSelectedString());
+                mActionModeHandler.updateSupportedOperation();
                 mRootPane.invalidate();
                 break;
             }
index d8e60d3..786fd27 100644 (file)
@@ -133,10 +133,6 @@ public class ActionModeHandler implements ActionMode.Callback {
                 needsConfirm = true;
             }
             mMenuExecutor.onMenuClicked(item, needsConfirm, listener);
-            if (action == R.id.action_select_all) {
-                updateSupportedOperation();
-                updateSelectionMenu();
-            }
         } finally {
             root.unlockRenderThread();
         }
@@ -282,6 +278,8 @@ public class ActionModeHandler implements ActionMode.Callback {
             mMenuTask.cancel();
         }
 
+        updateSelectionMenu();
+
         // Disable share action until share intent is in good shape
         final MenuItem item = mShareActionProvider != null ?
                 mMenu.findItem(R.id.action_share) : null;
index 1783b11..d012913 100644 (file)
@@ -107,15 +107,19 @@ public class SelectionManager {
         return mInverseSelection ^ mClickedSet.contains(itemId);
     }
 
+    private int getTotalCount() {
+        if (mTotal < 0) {
+            mTotal = mIsAlbumSet
+                    ? mSourceMediaSet.getSubMediaSetCount()
+                    : mSourceMediaSet.getMediaItemCount();
+        }
+        return mTotal;
+    }
+
     public int getSelectedCount() {
         int count = mClickedSet.size();
         if (mInverseSelection) {
-            if (mTotal < 0) {
-                mTotal = mIsAlbumSet
-                        ? mSourceMediaSet.getSubMediaSetCount()
-                        : mSourceMediaSet.getMediaItemCount();
-            }
-            count = mTotal - count;
+            count = getTotalCount() - count;
         }
         return count;
     }
@@ -128,8 +132,14 @@ public class SelectionManager {
             mClickedSet.add(path);
         }
 
+        // Convert to inverse selection mode if everything is selected.
+        int count = getSelectedCount();
+        if (count == getTotalCount()) {
+            selectAll();
+        }
+
         if (mListener != null) mListener.onSelectionChange(path, isItemSelected(path));
-        if (getSelectedCount() == 0 && mAutoLeave) {
+        if (count == 0 && mAutoLeave) {
             leaveSelectionMode();
         }
     }