Merge "Erase SD Card fixed in Settings/Storage." into honeycomb-mr2

This commit is contained in:
Gilles Debunne
2011-05-26 18:00:34 -07:00
committed by Android (Google) Code Review
4 changed files with 41 additions and 52 deletions

View File

@@ -19,6 +19,7 @@ package com.android.settings;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.storage.StorageVolume;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.Button; import android.widget.Button;
@@ -57,6 +58,10 @@ public class MediaFormat extends Activity {
} }
Intent intent = new Intent(ExternalStorageFormatter.FORMAT_ONLY); Intent intent = new Intent(ExternalStorageFormatter.FORMAT_ONLY);
intent.setComponent(ExternalStorageFormatter.COMPONENT_NAME); 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); startService(intent);
finish(); finish();
} }

View File

@@ -28,7 +28,6 @@ import android.content.res.Resources;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.os.IBinder; import android.os.IBinder;
import android.os.Parcelable;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
import android.os.storage.IMountService; import android.os.storage.IMountService;
@@ -76,24 +75,18 @@ public class Memory extends SettingsPreferenceFragment implements OnCancelListen
mResources = getResources(); mResources = getResources();
try { StorageVolume[] storageVolumes = mStorageManager.getVolumeList();
IMountService mountService = IMountService.Stub.asInterface(ServiceManager int length = storageVolumes.length;
.getService("mount"));
Parcelable[] volumes = mountService.getVolumeList();
int length = volumes.length;
mStorageVolumePreferenceCategories = new StorageVolumePreferenceCategory[length]; mStorageVolumePreferenceCategories = new StorageVolumePreferenceCategory[length];
for (int i = 0; i < length; i++) { for (int i = 0; i < length; i++) {
StorageVolume storageVolume = (StorageVolume) volumes[i]; StorageVolume storageVolume = storageVolumes[i];
StorageVolumePreferenceCategory storagePreferenceCategory = StorageVolumePreferenceCategory storagePreferenceCategory =
new StorageVolumePreferenceCategory(getActivity(), mResources, storageVolume, new StorageVolumePreferenceCategory(getActivity(), mResources, storageVolume,
i == 0); // The first volume is the primary volume mStorageManager, i == 0); // The first volume is the primary volume
mStorageVolumePreferenceCategories[i] = storagePreferenceCategory; mStorageVolumePreferenceCategories[i] = storagePreferenceCategory;
getPreferenceScreen().addPreference(storagePreferenceCategory); getPreferenceScreen().addPreference(storagePreferenceCategory);
storagePreferenceCategory.init(); storagePreferenceCategory.init();
} }
} catch (Exception e) {
Log.e(TAG, "couldn't talk to MountService", e);
}
} }
@Override @Override
@@ -117,7 +110,7 @@ public class Memory extends SettingsPreferenceFragment implements OnCancelListen
" to " + newState); " to " + newState);
for (int i = 0; i < mStorageVolumePreferenceCategories.length; i++) { for (int i = 0; i < mStorageVolumePreferenceCategories.length; i++) {
StorageVolumePreferenceCategory svpc = mStorageVolumePreferenceCategories[i]; StorageVolumePreferenceCategory svpc = mStorageVolumePreferenceCategories[i];
if (path.equals(svpc.getMountPoint())) { if (path.equals(svpc.getStorageVolume().getPath())) {
svpc.onStorageStateChanged(); svpc.onStorageStateChanged();
break; break;
} }
@@ -167,10 +160,11 @@ public class Memory extends SettingsPreferenceFragment implements OnCancelListen
boolean mountToggleClicked = svpc.mountToggleClicked(preference); boolean mountToggleClicked = svpc.mountToggleClicked(preference);
if (mountToggleClicked && mClickedMountToggle == null) { if (mountToggleClicked && mClickedMountToggle == null) {
mClickedMountToggle = preference; mClickedMountToggle = preference;
mClickedMountPoint = svpc.getMountPoint(); final StorageVolume storageVolume = svpc.getStorageVolume();
String state = svpc.getStorageVolumeState(); mClickedMountPoint = storageVolume.getPath();
if (state.equals(Environment.MEDIA_MOUNTED) || String state = mStorageManager.getVolumeState(storageVolume.getPath());
state.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) { if (Environment.MEDIA_MOUNTED.equals(state) ||
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
unmount(); unmount();
} else { } else {
mount(); mount();

View File

@@ -191,11 +191,11 @@ public class MiscFilesHandler extends ListActivity {
public MemoryMearurementAdapter(Activity activity) { public MemoryMearurementAdapter(Activity activity) {
mContext = activity; mContext = activity;
final Bundle extras = activity.getIntent().getExtras(); final StorageVolume storageVolume = activity.getIntent().getParcelableExtra(
final StorageVolume storageVolume = extras.getParcelable( StorageVolume.EXTRA_STORAGE_VOLUME);
StorageVolumePreferenceCategory.STORAGE_VOLUME);
StorageMeasurement mMeasurement = 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; mData = (ArrayList<StorageMeasurement.FileInfo>) mMeasurement.mFileInfoForMisc;
if (mData != null) { if (mData != null) {
for (StorageMeasurement.FileInfo info : mData) { for (StorageMeasurement.FileInfo info : mData) {

View File

@@ -26,8 +26,7 @@ import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.os.ServiceManager; import android.os.storage.StorageManager;
import android.os.storage.IMountService;
import android.os.storage.StorageVolume; import android.os.storage.StorageVolume;
import android.preference.Preference; import android.preference.Preference;
import android.preference.PreferenceCategory; import android.preference.PreferenceCategory;
@@ -60,6 +59,8 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory implemen
private StorageVolume mStorageVolume; private StorageVolume mStorageVolume;
private StorageManager mStorageManager = null;
private StorageMeasurement mMeasurement; private StorageMeasurement mMeasurement;
static class CategoryInfo { static class CategoryInfo {
@@ -126,9 +127,6 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory implemen
// Updates the memory usage bar graph. // Updates the memory usage bar graph.
private static final int MSG_UI_UPDATE_EXACT = 2; 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() { private Handler mUpdateHandler = new Handler() {
@Override @Override
public void handleMessage(Message msg) { public void handleMessage(Message msg) {
@@ -157,10 +155,11 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory implemen
}; };
public StorageVolumePreferenceCategory(Context context, Resources resources, public StorageVolumePreferenceCategory(Context context, Resources resources,
StorageVolume storageVolume, boolean isPrimary) { StorageVolume storageVolume, StorageManager storageManager, boolean isPrimary) {
super(context); super(context);
mResources = resources; mResources = resources;
mStorageVolume = storageVolume; mStorageVolume = storageVolume;
mStorageManager = storageManager;
setTitle(storageVolume.getDescription()); setTitle(storageVolume.getDescription());
mMeasurement = StorageMeasurement.getInstance(context, storageVolume, isPrimary); mMeasurement = StorageMeasurement.getInstance(context, storageVolume, isPrimary);
mMeasurement.setReceiver(this); mMeasurement.setReceiver(this);
@@ -196,18 +195,8 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory implemen
mFormatPreference.setSummary(R.string.sd_format_summary); mFormatPreference.setSummary(R.string.sd_format_summary);
} }
public String getMountPoint() { public StorageVolume getStorageVolume() {
return mStorageVolume.getPath(); return mStorageVolume;
}
public String getStorageVolumeState() {
try {
IMountService mountService =
IMountService.Stub.asInterface(ServiceManager.getService("mount"));
return mountService.getVolumeState(getMountPoint());
} catch (Exception rex) {
return Environment.MEDIA_REMOVED;
}
} }
/** /**
@@ -237,10 +226,10 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory implemen
private void updatePreferencesFromState() { private void updatePreferencesFromState() {
resetPreferences(); resetPreferences();
String state = getStorageVolumeState(); String state = mStorageManager.getVolumeState(mStorageVolume.getPath());
String readOnly = ""; String readOnly = "";
if (state.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) { if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
state = Environment.MEDIA_MOUNTED; state = Environment.MEDIA_MOUNTED;
readOnly = mResources.getString(R.string.read_only); readOnly = mResources.getString(R.string.read_only);
removePreference(mFormatPreference); removePreference(mFormatPreference);
@@ -250,21 +239,21 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory implemen
removePreference(mFormatPreference); 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. // This device has built-in storage that is not removable.
// There is no reason for the user to unmount it. // There is no reason for the user to unmount it.
removePreference(mMountTogglePreference); removePreference(mMountTogglePreference);
} }
if (state.equals(Environment.MEDIA_MOUNTED)) { if (Environment.MEDIA_MOUNTED.equals(state)) {
mPreferences[AVAILABLE].setSummary(mPreferences[AVAILABLE].getSummary() + readOnly); mPreferences[AVAILABLE].setSummary(mPreferences[AVAILABLE].getSummary() + readOnly);
mMountTogglePreference.setEnabled(true); mMountTogglePreference.setEnabled(true);
mMountTogglePreference.setTitle(mResources.getString(R.string.sd_eject)); mMountTogglePreference.setTitle(mResources.getString(R.string.sd_eject));
mMountTogglePreference.setSummary(mResources.getString(R.string.sd_eject_summary)); mMountTogglePreference.setSummary(mResources.getString(R.string.sd_eject_summary));
} else { } else {
if (state.equals(Environment.MEDIA_UNMOUNTED) || state.equals(Environment.MEDIA_NOFS) if (Environment.MEDIA_UNMOUNTED.equals(state) || Environment.MEDIA_NOFS.equals(state)
|| state.equals(Environment.MEDIA_UNMOUNTABLE)) { || Environment.MEDIA_UNMOUNTABLE.equals(state)) {
mMountTogglePreference.setEnabled(true); mMountTogglePreference.setEnabled(true);
mMountTogglePreference.setTitle(mResources.getString(R.string.sd_mount)); mMountTogglePreference.setTitle(mResources.getString(R.string.sd_mount));
mMountTogglePreference.setSummary(mResources.getString(R.string.sd_mount_summary)); mMountTogglePreference.setSummary(mResources.getString(R.string.sd_mount_summary));
@@ -391,6 +380,7 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory implemen
if (preference == mFormatPreference) { if (preference == mFormatPreference) {
intent = new Intent(Intent.ACTION_VIEW); intent = new Intent(Intent.ACTION_VIEW);
intent.setClass(getContext(), com.android.settings.MediaFormat.class); intent.setClass(getContext(), com.android.settings.MediaFormat.class);
intent.putExtra(StorageVolume.EXTRA_STORAGE_VOLUME, mStorageVolume);
} else if (preference == mPreferences[APPLICATIONS]) { } else if (preference == mPreferences[APPLICATIONS]) {
intent = new Intent(Intent.ACTION_MANAGE_PACKAGE_STORAGE); intent = new Intent(Intent.ACTION_MANAGE_PACKAGE_STORAGE);
intent.setClass(getContext(), intent.setClass(getContext(),
@@ -408,7 +398,7 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory implemen
Context context = getContext().getApplicationContext(); Context context = getContext().getApplicationContext();
if (mMeasurement.getMiscSize() > 0) { if (mMeasurement.getMiscSize() > 0) {
intent = new Intent(context, MiscFilesHandler.class); intent = new Intent(context, MiscFilesHandler.class);
intent.putExtra(STORAGE_VOLUME, mStorageVolume); intent.putExtra(StorageVolume.EXTRA_STORAGE_VOLUME, mStorageVolume);
} }
} }