PowerManagerService: Switch to using MountService shutdown for media
Signed-off-by: San Mehat <san@google.com>
This commit is contained in:
@@ -2126,60 +2126,6 @@ class PowerManagerService extends IPowerManager.Stub
|
||||
}
|
||||
}
|
||||
|
||||
private void unmountExternalStorage() {
|
||||
String state = Environment.getExternalStorageState();
|
||||
|
||||
IMountService mSvc;
|
||||
|
||||
mSvc = IMountService.Stub.asInterface(
|
||||
ServiceManager.getService("mount"));
|
||||
if (mSvc == null) {
|
||||
Log.e(TAG, "MountService unavailable");
|
||||
return;
|
||||
}
|
||||
|
||||
if (state.equals(Environment.MEDIA_SHARED)) {
|
||||
/*
|
||||
* If the media is currently shared, unshare it.
|
||||
* XXX: This is still dangerous!. We should not
|
||||
* be rebooting at *all* if UMS is enabled, since
|
||||
* the UMS host could have dirty FAT cache entries
|
||||
* yet to flush.
|
||||
*/
|
||||
try {
|
||||
mSvc.setMassStorageEnabled(false);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "ums disable failed", e);
|
||||
}
|
||||
} else if (state.equals(Environment.MEDIA_CHECKING)) {
|
||||
/*
|
||||
* If the media is being checked, then we need to wait for
|
||||
* it to complete before being able to proceed.
|
||||
*/
|
||||
while (state.equals(Environment.MEDIA_CHECKING)) {
|
||||
state = Environment.getExternalStorageState();
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException iex) {
|
||||
Log.e(TAG, "Interrupted while waiting for media", iex);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (state.equals(Environment.MEDIA_MOUNTED)) {
|
||||
/*
|
||||
* If the media is mounted, then gracefully unmount it.
|
||||
*/
|
||||
try {
|
||||
String m = Environment.getExternalStorageDirectory().toString();
|
||||
mSvc.unmountMedia(m);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "external storage unmount failed", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reboot the device immediately, passing 'reason' (may be null)
|
||||
* to the underlying __reboot system call. Should not return.
|
||||
@@ -2188,7 +2134,22 @@ class PowerManagerService extends IPowerManager.Stub
|
||||
{
|
||||
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.REBOOT, null);
|
||||
|
||||
unmountExternalStorage();
|
||||
/*
|
||||
* Manually shutdown the MountService to ensure media is
|
||||
* put into a safe state.
|
||||
*/
|
||||
IMountService mSvc = IMountService.Stub.asInterface(
|
||||
ServiceManager.getService("mount"));
|
||||
|
||||
if (mSvc != null) {
|
||||
try {
|
||||
mSvc.shutdown();
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "MountService shutdown failed", e);
|
||||
}
|
||||
} else {
|
||||
Log.w(TAG, "MountService unavailable for shutdown");
|
||||
}
|
||||
|
||||
try {
|
||||
Power.reboot(reason);
|
||||
|
||||
Reference in New Issue
Block a user