summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSuchi Amalapurapu <asuchitra@google.com>2010-03-23 15:37:12 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-03-23 15:37:12 -0700
commit983192df774b01abbe43d0eaecc3521d42fb576d (patch)
treeebc1ba7252fa1d945175c07a8dd2e60dc79902f5 /src
parent98d55daeea6d07e69a5f9f8893c003fcf6a163b0 (diff)
parent6f58b1b426b8c466881ad038f40b57e2f8dcca9d (diff)
downloadpackages_apps_Settings-983192df774b01abbe43d0eaecc3521d42fb576d.zip
packages_apps_Settings-983192df774b01abbe43d0eaecc3521d42fb576d.tar.gz
packages_apps_Settings-983192df774b01abbe43d0eaecc3521d42fb576d.tar.bz2
Merge "The getStorageUsers only returns list of storage users accessing the sdcard. We also have to check if applications on sdcard are currently running."
Diffstat (limited to 'src')
-rw-r--r--src/com/android/settings/deviceinfo/Memory.java65
1 files changed, 46 insertions, 19 deletions
diff --git a/src/com/android/settings/deviceinfo/Memory.java b/src/com/android/settings/deviceinfo/Memory.java
index fa217ad..1f7f29d 100644
--- a/src/com/android/settings/deviceinfo/Memory.java
+++ b/src/com/android/settings/deviceinfo/Memory.java
@@ -16,6 +16,7 @@
package com.android.settings.deviceinfo;
+import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.BroadcastReceiver;
@@ -24,6 +25,9 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.DialogInterface.OnCancelListener;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Handler;
@@ -46,6 +50,9 @@ import android.widget.Toast;
import com.android.settings.R;
import java.io.File;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
public class Memory extends PreferenceActivity implements OnCancelListener {
private static final String TAG = "Memory";
@@ -215,32 +222,52 @@ public class Memory extends PreferenceActivity implements OnCancelListener {
showDialog(id);
}
- private void unmount() {
- // Check if the sdcard is being accessed by other processes
- // and let the user decide if the sdcard should be ejected.
- String extStoragePath = Environment.
- getExternalStorageDirectory().toString();
+ private boolean hasAppsAccessingStorage() throws RemoteException {
+ String extStoragePath = Environment.getExternalStorageDirectory().toString();
IMountService mountService = getMountService();
- int stUsers[] = null;
+ boolean showPidDialog = false;
+ int stUsers[] = mountService.getStorageUsers(extStoragePath);
+ if (stUsers != null && stUsers.length > 0) {
+ return true;
+ }
+ ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
+ PackageManager pm = getPackageManager();
+ List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
+ if (runningApps != null && runningApps.size() > 0) {
+ for (ActivityManager.RunningAppProcessInfo app : runningApps) {
+ if (app.pkgList == null) {
+ continue;
+ }
+ for (String pkg : app.pkgList) {
+ try {
+ ApplicationInfo info = pm.getApplicationInfo(pkg, 0);
+ if ((info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
+ return true;
+ }
+ } catch (NameNotFoundException e) {
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ private void unmount() {
+ // Check if external media is in use.
try {
- stUsers = mountService.getStorageUsers(extStoragePath);
+ if (hasAppsAccessingStorage()) {
+ if (localLOGV) Log.i(TAG, "Do have storage users accessing media");
+ // Present dialog to user
+ showDialogInner(DLG_CONFIRM_UNMOUNT);
+ } else {
+ doUnmount(true);
+ }
} catch (RemoteException e) {
// Very unlikely. But present an error dialog anyway
Log.e(TAG, "Is MountService running?");
showDialogInner(DLG_ERROR_UNMOUNT);
}
- if (stUsers != null && stUsers.length > 0) {
- if (localLOGV) Log.i(TAG, "Do have storage users accessing "
- + extStoragePath);
- for (int pid : stUsers) {
- if (localLOGV) Log.i(TAG, pid + " accessing file on sdcard");
- }
- // Present dialog to user
- showDialogInner(DLG_CONFIRM_UNMOUNT);
- } else {
- doUnmount(true);
- }
-}
+ }
private void mount() {
IMountService mountService = getMountService();