OSDN Git Service

Erase SD Card fixed in Settings/Storage.
authorGilles Debunne <debunne@google.com>
Thu, 26 May 2011 01:34:59 +0000 (18:34 -0700)
committerGilles Debunne <debunne@google.com>
Thu, 26 May 2011 22:00:17 +0000 (15:00 -0700)
Adding the StorageVolume to the format intent.

Change-Id: If1a50a2d5c5154e9f00116db536c62324c447e7c

src/com/android/settings/MediaFormat.java
src/com/android/settings/deviceinfo/Memory.java
src/com/android/settings/deviceinfo/MiscFilesHandler.java
src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java

index d8d57e4..dc495ec 100644 (file)
@@ -19,6 +19,7 @@ package com.android.settings;
 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
+import android.os.storage.StorageVolume;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.Button;
@@ -57,6 +58,10 @@ public class MediaFormat extends Activity {
                 }
                 Intent intent = new Intent(ExternalStorageFormatter.FORMAT_ONLY);
                 intent.setComponent(ExternalStorageFormatter.COMPONENT_NAME);
+                // Transfer the storage volume to the new intent
+                final StorageVolume storageVolume = getIntent().getParcelableExtra(
+                        StorageVolume.EXTRA_STORAGE_VOLUME);
+                intent.putExtra(StorageVolume.EXTRA_STORAGE_VOLUME, storageVolume);
                 startService(intent);
                 finish();
             }
index 955e578..6e7af5c 100644 (file)
@@ -28,7 +28,6 @@ import android.content.res.Resources;
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.IBinder;
-import android.os.Parcelable;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.storage.IMountService;
@@ -76,23 +75,17 @@ public class Memory extends SettingsPreferenceFragment implements OnCancelListen
 
         mResources = getResources();
 
-        try {
-            IMountService mountService = IMountService.Stub.asInterface(ServiceManager
-                    .getService("mount"));
-            Parcelable[] volumes = mountService.getVolumeList();
-            int length = volumes.length;
-            mStorageVolumePreferenceCategories = new StorageVolumePreferenceCategory[length];
-            for (int i = 0; i < length; i++) {
-                StorageVolume storageVolume = (StorageVolume) volumes[i];
-                StorageVolumePreferenceCategory storagePreferenceCategory =
-                    new StorageVolumePreferenceCategory(getActivity(), mResources, storageVolume,
-                            i == 0); // The first volume is the primary volume
-                mStorageVolumePreferenceCategories[i] = storagePreferenceCategory;
-                getPreferenceScreen().addPreference(storagePreferenceCategory);
-                storagePreferenceCategory.init();
-            }
-        } catch (Exception e) {
-            Log.e(TAG, "couldn't talk to MountService", e);
+        StorageVolume[] storageVolumes = mStorageManager.getVolumeList();
+        int length = storageVolumes.length;
+        mStorageVolumePreferenceCategories = new StorageVolumePreferenceCategory[length];
+        for (int i = 0; i < length; i++) {
+            StorageVolume storageVolume = storageVolumes[i];
+            StorageVolumePreferenceCategory storagePreferenceCategory =
+                new StorageVolumePreferenceCategory(getActivity(), mResources, storageVolume,
+                        mStorageManager, i == 0); // The first volume is the primary volume
+            mStorageVolumePreferenceCategories[i] = storagePreferenceCategory;
+            getPreferenceScreen().addPreference(storagePreferenceCategory);
+            storagePreferenceCategory.init();
         }
     }
 
@@ -117,7 +110,7 @@ public class Memory extends SettingsPreferenceFragment implements OnCancelListen
                     " to " + newState);
             for (int i = 0; i < mStorageVolumePreferenceCategories.length; i++) {
                 StorageVolumePreferenceCategory svpc = mStorageVolumePreferenceCategories[i];
-                if (path.equals(svpc.getMountPoint())) {
+                if (path.equals(svpc.getStorageVolume().getPath())) {
                     svpc.onStorageStateChanged();
                     break;
                 }
@@ -167,10 +160,11 @@ public class Memory extends SettingsPreferenceFragment implements OnCancelListen
             boolean mountToggleClicked = svpc.mountToggleClicked(preference);
             if (mountToggleClicked && mClickedMountToggle == null) {
                 mClickedMountToggle = preference;
-                mClickedMountPoint = svpc.getMountPoint();
-                String state = svpc.getStorageVolumeState();
-                if (state.equals(Environment.MEDIA_MOUNTED) ||
-                        state.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
+                final StorageVolume storageVolume = svpc.getStorageVolume();
+                mClickedMountPoint = storageVolume.getPath();
+                String state = mStorageManager.getVolumeState(storageVolume.getPath());
+                if (Environment.MEDIA_MOUNTED.equals(state) ||
+                        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
                     unmount();
                 } else {
                     mount();
index eae6861..2f9697f 100644 (file)
@@ -191,11 +191,11 @@ public class MiscFilesHandler extends ListActivity {
 
         public MemoryMearurementAdapter(Activity activity) {
             mContext = activity;
-            final Bundle extras = activity.getIntent().getExtras();
-            final StorageVolume storageVolume = extras.getParcelable(
-                    StorageVolumePreferenceCategory.STORAGE_VOLUME);
+            final StorageVolume storageVolume = activity.getIntent().getParcelableExtra(
+                    StorageVolume.EXTRA_STORAGE_VOLUME);
             StorageMeasurement mMeasurement = 
-                StorageMeasurement.getInstance(activity, storageVolume, false);
+                StorageMeasurement.getInstance(activity, storageVolume, false /*Unused as a key*/);
+            if (mMeasurement == null) return;
             mData = (ArrayList<StorageMeasurement.FileInfo>) mMeasurement.mFileInfoForMisc;
             if (mData != null) {
                 for (StorageMeasurement.FileInfo info : mData) {
index 7b52bcb..83f9ee2 100644 (file)
@@ -26,8 +26,7 @@ import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
 import android.os.Message;
-import android.os.ServiceManager;
-import android.os.storage.IMountService;
+import android.os.storage.StorageManager;
 import android.os.storage.StorageVolume;
 import android.preference.Preference;
 import android.preference.PreferenceCategory;
@@ -60,6 +59,8 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory implemen
 
     private StorageVolume mStorageVolume;
 
+    private StorageManager mStorageManager = null;
+
     private StorageMeasurement mMeasurement;
 
     static class CategoryInfo {
@@ -126,9 +127,6 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory implemen
     // Updates the memory usage bar graph.
     private static final int MSG_UI_UPDATE_EXACT = 2;
 
-    // Key for the extra StorageVolume bundle added to the Misc intent.
-    static final String STORAGE_VOLUME = "storage_volume";
-
     private Handler mUpdateHandler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
@@ -157,10 +155,11 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory implemen
     };
 
     public StorageVolumePreferenceCategory(Context context, Resources resources,
-            StorageVolume storageVolume, boolean isPrimary) {
+            StorageVolume storageVolume, StorageManager storageManager, boolean isPrimary) {
         super(context);
         mResources = resources;
         mStorageVolume = storageVolume;
+        mStorageManager = storageManager;
         setTitle(storageVolume.getDescription());
         mMeasurement = StorageMeasurement.getInstance(context, storageVolume, isPrimary);
         mMeasurement.setReceiver(this);
@@ -196,18 +195,8 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory implemen
         mFormatPreference.setSummary(R.string.sd_format_summary);
     }
 
-    public String getMountPoint() {
-        return mStorageVolume.getPath();
-    }
-
-    public String getStorageVolumeState() {
-        try {
-            IMountService mountService =
-                IMountService.Stub.asInterface(ServiceManager.getService("mount"));
-            return mountService.getVolumeState(getMountPoint());
-        } catch (Exception rex) {
-            return Environment.MEDIA_REMOVED;
-        }
+    public StorageVolume getStorageVolume() {
+        return mStorageVolume;
     }
 
     /**
@@ -237,10 +226,10 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory implemen
     private void updatePreferencesFromState() {
         resetPreferences();
 
-        String state = getStorageVolumeState();
+        String state = mStorageManager.getVolumeState(mStorageVolume.getPath());
 
         String readOnly = "";
-        if (state.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
+        if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
             state = Environment.MEDIA_MOUNTED;
             readOnly = mResources.getString(R.string.read_only);
             removePreference(mFormatPreference);
@@ -250,21 +239,21 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory implemen
             removePreference(mFormatPreference);
         }
 
-        if (!mStorageVolume.isRemovable() && !state.equals(Environment.MEDIA_UNMOUNTED)) {
+        if (!mStorageVolume.isRemovable() && !Environment.MEDIA_UNMOUNTED.equals(state)) {
             // This device has built-in storage that is not removable.
             // There is no reason for the user to unmount it.
             removePreference(mMountTogglePreference);
         }
 
-        if (state.equals(Environment.MEDIA_MOUNTED)) {
+        if (Environment.MEDIA_MOUNTED.equals(state)) {
             mPreferences[AVAILABLE].setSummary(mPreferences[AVAILABLE].getSummary() + readOnly);
 
             mMountTogglePreference.setEnabled(true);
             mMountTogglePreference.setTitle(mResources.getString(R.string.sd_eject));
             mMountTogglePreference.setSummary(mResources.getString(R.string.sd_eject_summary));
         } else {
-            if (state.equals(Environment.MEDIA_UNMOUNTED) || state.equals(Environment.MEDIA_NOFS)
-                    || state.equals(Environment.MEDIA_UNMOUNTABLE)) {
+            if (Environment.MEDIA_UNMOUNTED.equals(state) || Environment.MEDIA_NOFS.equals(state)
+                    || Environment.MEDIA_UNMOUNTABLE.equals(state)) {
                 mMountTogglePreference.setEnabled(true);
                 mMountTogglePreference.setTitle(mResources.getString(R.string.sd_mount));
                 mMountTogglePreference.setSummary(mResources.getString(R.string.sd_mount_summary));
@@ -391,6 +380,7 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory implemen
         if (preference == mFormatPreference) {
             intent = new Intent(Intent.ACTION_VIEW);
             intent.setClass(getContext(), com.android.settings.MediaFormat.class);
+            intent.putExtra(StorageVolume.EXTRA_STORAGE_VOLUME, mStorageVolume);
         } else if (preference == mPreferences[APPLICATIONS]) {
             intent = new Intent(Intent.ACTION_MANAGE_PACKAGE_STORAGE);
             intent.setClass(getContext(),
@@ -408,7 +398,7 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory implemen
             Context context = getContext().getApplicationContext();
             if (mMeasurement.getMiscSize() > 0) {
                 intent = new Intent(context, MiscFilesHandler.class);
-                intent.putExtra(STORAGE_VOLUME, mStorageVolume);
+                intent.putExtra(StorageVolume.EXTRA_STORAGE_VOLUME, mStorageVolume);
             }
         }