summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/deviceinfo/Memory.java
diff options
context:
space:
mode:
authorSuchi Amalapurapu <asuchitra@google.com>2010-03-23 15:02:13 -0700
committerSuchi Amalapurapu <asuchitra@google.com>2010-03-23 15:17:52 -0700
commit6f58b1b426b8c466881ad038f40b57e2f8dcca9d (patch)
tree3d32cd2a5ffe6dffe044c44b259fa0b127b07af9 /src/com/android/settings/deviceinfo/Memory.java
parent28bcb47ef7659d68223f837f17549ba80aa89ab1 (diff)
downloadpackages_apps_Settings-6f58b1b426b8c466881ad038f40b57e2f8dcca9d.tar.gz
packages_apps_Settings-6f58b1b426b8c466881ad038f40b57e2f8dcca9d.tar.bz2
packages_apps_Settings-6f58b1b426b8c466881ad038f40b57e2f8dcca9d.zip
The getStorageUsers only returns list of storage users accessing the sdcard.
We also have to check if applications on sdcard are currently running. Change-Id: I4b6478bc834e956f963735f69829c5ba4c7fb8c2
Diffstat (limited to 'src/com/android/settings/deviceinfo/Memory.java')
-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 fa217ad5c..1f7f29de2 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();