am f9d8deff: am 7beb763d: am 4a6b9095: Merge "Change move storage from dropdown pref to dialog" into mnc-dev

* commit 'f9d8deffaa79da57f04c9eed50d0d1991daac4b1':
  Change move storage from dropdown pref to dialog
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 02d92ec..5c57f83 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6460,6 +6460,12 @@
    <!-- Title of storage preference to control where app is stored -->
    <string name="storage_used">Storage used</string>
 
+   <!-- Title of button to change storage [CHAR LIMIT=25] -->
+   <string name="change">Change</string>
+
+   <!-- Title of dialog to change storage [CHAR LIMIT=25] -->
+   <string name="change_storage">Change storage</string>
+
    <!-- Label for notification settings for an specific app [CHAR LIMIT=40] -->
    <string name="notifications_label">Notifications</string>
    <!-- App notification summary with notifications enabled [CHAR LIMIT=40] -->
diff --git a/res/xml/app_storage_settings.xml b/res/xml/app_storage_settings.xml
index 7c5c25c..093d781 100644
--- a/res/xml/app_storage_settings.xml
+++ b/res/xml/app_storage_settings.xml
@@ -17,11 +17,19 @@
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
                   android:title="@string/application_info_label">
 
-    <com.android.settings.DropDownPreference
-        android:key="app_location_setting"
+    <com.android.settings.applications.SpacePreference
+        android:layout_height="8dp" />
+
+    <Preference
+        android:key="storage_used"
         android:title="@string/storage_used"
         android:summary="@string/storage_type_internal"
-        android:selectable="true" />
+        android:selectable="false"
+        android:layout="@layout/horizontal_preference" />
+
+    <com.android.settings.applications.LayoutPreference
+        android:key="change_storage_button"
+        android:layout="@layout/single_button_panel" />
 
     <PreferenceCategory
         android:key="storage_category"
diff --git a/src/com/android/settings/applications/AppStorageSettings.java b/src/com/android/settings/applications/AppStorageSettings.java
index 739aa3c..38440cb 100644
--- a/src/com/android/settings/applications/AppStorageSettings.java
+++ b/src/com/android/settings/applications/AppStorageSettings.java
@@ -38,7 +38,6 @@
 import android.widget.Button;
 
 import com.android.internal.logging.MetricsLogger;
-import com.android.settings.DropDownPreference;
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.deviceinfo.StorageWizardMoveConfirm;
@@ -51,7 +50,7 @@
 import java.util.Objects;
 
 public class AppStorageSettings extends AppInfoWithHeader
-        implements OnClickListener, Callbacks, DropDownPreference.Callback {
+        implements OnClickListener, Callbacks, DialogInterface.OnClickListener {
     private static final String TAG = AppStorageSettings.class.getSimpleName();
 
     //internal constants used in Handler
@@ -70,7 +69,8 @@
     private static final int DLG_CLEAR_DATA = DLG_BASE + 1;
     private static final int DLG_CANNOT_CLEAR_DATA = DLG_BASE + 2;
 
-    private static final String KEY_MOVE_PREFERENCE = "app_location_setting";
+    private static final String KEY_STORAGE_USED = "storage_used";
+    private static final String KEY_CHANGE_STORAGE = "change_storage_button";
     private static final String KEY_STORAGE_CATEGORY = "storage_category";
 
     private static final String KEY_TOTAL_SIZE = "total_size";
@@ -94,7 +94,8 @@
     private Button mClearDataButton;
     private Button mClearCacheButton;
 
-    private DropDownPreference mMoveDropDown;
+    private Preference mStorageUsed;
+    private Button mChangeStorageButton;
 
     private boolean mCanClearData = true;
     private boolean mHaveSizes = false;
@@ -113,6 +114,9 @@
     private CharSequence mInvalidSizeStr;
     private CharSequence mComputingStr;
 
+    private VolumeInfo[] mCandidates;
+    private AlertDialog.Builder mDialogBuilder;
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -146,8 +150,11 @@
         mClearDataButton = (Button) ((LayoutPreference) findPreference(KEY_CLEAR_DATA))
                 .findViewById(R.id.button);
 
-        mMoveDropDown = (DropDownPreference) findPreference(KEY_MOVE_PREFERENCE);
-        mMoveDropDown.setCallback(this);
+        mStorageUsed = findPreference(KEY_STORAGE_USED);
+        mChangeStorageButton = (Button) ((LayoutPreference) findPreference(KEY_CHANGE_STORAGE))
+                .findViewById(R.id.button);
+        mChangeStorageButton.setText(R.string.change);
+        mChangeStorageButton.setOnClickListener(this);
 
         // Cache section
         mCacheSize = findPreference(KEY_CACHE_SIZE);
@@ -164,7 +171,7 @@
                 mClearCacheObserver = new ClearCacheObserver();
             }
             mPm.deleteApplicationCacheFiles(mPackageName, mClearCacheObserver);
-        } else if(v == mClearDataButton) {
+        } else if (v == mClearDataButton) {
             if (mAppEntry.info.manageSpaceActivityName != null) {
                 if (!Utils.isMonkeyRunning()) {
                     Intent intent = new Intent(Intent.ACTION_DEFAULT);
@@ -175,15 +182,17 @@
             } else {
                 showDialogInner(DLG_CLEAR_DATA, 0);
             }
+        } else if (v == mChangeStorageButton) {
+            mDialogBuilder.show();
         }
     }
 
     @Override
-    public boolean onItemSelected(int pos, Object value) {
+    public void onClick(DialogInterface dialog, int which) {
         final Context context = getActivity();
 
         // If not current volume, kick off move wizard
-        final VolumeInfo targetVol = (VolumeInfo) value;
+        final VolumeInfo targetVol = mCandidates[which];
         final VolumeInfo currentVol = context.getPackageManager().getPackageCurrentVolume(
                 mAppEntry.info);
         if (!Objects.equals(targetVol, currentVol)) {
@@ -192,8 +201,7 @@
             intent.putExtra(Intent.EXTRA_PACKAGE_NAME, mAppEntry.info.packageName);
             startActivity(intent);
         }
-
-        return true;
+        dialog.dismiss();
     }
 
     private String getSizeStr(long size) {
@@ -273,18 +281,20 @@
     @Override
     protected boolean refreshUi() {
         retrieveAppEntry();
-        refreshButtons();
         refreshSizeInfo();
 
         final VolumeInfo currentVol = getActivity().getPackageManager()
                 .getPackageCurrentVolume(mAppEntry.info);
-        mMoveDropDown.setSelectedValue(currentVol);
+        final StorageManager storage = getContext().getSystemService(StorageManager.class);
+        mStorageUsed.setSummary(storage.getBestVolumeDescription(currentVol));
+
+        refreshButtons();
 
         return true;
     }
 
     private void refreshButtons() {
-        initMoveDropDown();
+        initMoveDialog();
         initDataButtons();
     }
 
@@ -314,7 +324,7 @@
         }
     }
 
-    private void initMoveDropDown() {
+    private void initMoveDialog() {
         final Context context = getActivity();
         final StorageManager storage = context.getSystemService(StorageManager.class);
 
@@ -323,14 +333,23 @@
         if (candidates.size() > 1) {
             Collections.sort(candidates, VolumeInfo.getDescriptionComparator());
 
-            mMoveDropDown.clearItems();
-            for (VolumeInfo vol : candidates) {
-                final String volDescrip = storage.getBestVolumeDescription(vol);
-                mMoveDropDown.addItem(volDescrip, vol);
+            CharSequence[] labels = new CharSequence[candidates.size()];
+            int current = -1;
+            for (int i = 0; i < candidates.size(); i++) {
+                final String volDescrip = storage.getBestVolumeDescription(candidates.get(i));
+                if (Objects.equals(volDescrip, mStorageUsed.getSummary())) {
+                    current = i;
+                }
+                labels[i] = volDescrip;
             }
-            mMoveDropDown.setSelectable(!mAppControlRestricted);
+            mCandidates = candidates.toArray(new VolumeInfo[candidates.size()]);
+            mDialogBuilder = new AlertDialog.Builder(getContext())
+                    .setTitle(R.string.change_storage)
+                    .setSingleChoiceItems(labels, current, this)
+                    .setNegativeButton(R.string.cancel, null);
         } else {
-            removePreference(KEY_MOVE_PREFERENCE);
+            removePreference(KEY_STORAGE_USED);
+            removePreference(KEY_CHANGE_STORAGE);
         }
     }