Loading services/java/com/android/server/MountService.java +19 −60 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.content.res.ObbInfo; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; import android.hardware.usb.UsbManager; import android.net.Uri; import android.os.Binder; import android.os.Environment; Loading Loading @@ -152,7 +153,6 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC * 600 series - Unsolicited broadcasts. */ public static final int VolumeStateChange = 605; public static final int ShareAvailabilityChange = 620; public static final int VolumeDiskInserted = 630; public static final int VolumeDiskRemoved = 631; public static final int VolumeBadRemoval = 632; Loading @@ -167,6 +167,7 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC private String mExternalStoragePath; private PackageManagerService mPms; private boolean mUmsEnabling; private boolean mUmsAvailable = false; // Used as a lock for methods that register/unregister listeners. final private ArrayList<MountServiceBinderListener> mListeners = new ArrayList<MountServiceBinderListener>(); Loading Loading @@ -525,6 +526,10 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC } } }.start(); } else if (action.equals(UsbManager.ACTION_USB_STATE)) { boolean available = (intent.getBooleanExtra(UsbManager.USB_CONNECTED, false) && intent.getBooleanExtra(UsbManager.USB_FUNCTION_MASS_STORAGE, false)); notifyShareAvailabilityChange(available); } } }; Loading Loading @@ -654,12 +659,6 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC updatePublicVolumeState(mExternalStoragePath, Environment.MEDIA_REMOVED); } try { boolean avail = doGetShareMethodAvailable("ums"); notifyShareAvailabilityChange("ums", avail); } catch (Exception ex) { Slog.w(TAG, "Failed to get share availability"); } /* * Now that we've done our initialization, release * the hounds! Loading Loading @@ -694,13 +693,6 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC notifyVolumeStateChange( cooked[2], cooked[3], Integer.parseInt(cooked[7]), Integer.parseInt(cooked[10])); } else if (code == VoldResponseCode.ShareAvailabilityChange) { // FMT: NNN Share method <method> now <available|unavailable> boolean avail = false; if (cooked[5].equals("available")) { avail = true; } notifyShareAvailabilityChange(cooked[3], avail); } else if ((code == VoldResponseCode.VolumeDiskInserted) || (code == VoldResponseCode.VolumeDiskRemoved) || (code == VoldResponseCode.VolumeBadRemoval)) { Loading Loading @@ -835,42 +827,6 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC } } private boolean doGetShareMethodAvailable(String method) { ArrayList<String> rsp; try { rsp = mConnector.doCommand("share status " + method); } catch (NativeDaemonConnectorException ex) { Slog.e(TAG, "Failed to determine whether share method " + method + " is available."); return false; } for (String line : rsp) { String[] tok = line.split(" "); if (tok.length < 3) { Slog.e(TAG, "Malformed response to share status " + method); return false; } int code; try { code = Integer.parseInt(tok[0]); } catch (NumberFormatException nfe) { Slog.e(TAG, String.format("Error parsing code %s", tok[0])); return false; } if (code == VoldResponseCode.ShareStatusResult) { if (tok[2].equals("available")) return true; return false; } else { Slog.e(TAG, String.format("Unexpected response code %d", code)); return false; } } Slog.e(TAG, "Got an empty response"); return false; } private int doMountVolume(String path) { int rc = StorageResultCode.OperationSucceeded; Loading Loading @@ -1018,13 +974,9 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC return false; } private void notifyShareAvailabilityChange(String method, final boolean avail) { if (!method.equals("ums")) { Slog.w(TAG, "Ignoring unsupported share method {" + method + "}"); return; } private void notifyShareAvailabilityChange(final boolean avail) { synchronized (mListeners) { mUmsAvailable = avail; for (int i = mListeners.size() -1; i >= 0; i--) { MountServiceBinderListener bl = mListeners.get(i); try { Loading Loading @@ -1189,8 +1141,13 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC // XXX: This will go away soon in favor of IMountServiceObserver mPms = (PackageManagerService) ServiceManager.getService("package"); mContext.registerReceiver(mBroadcastReceiver, new IntentFilter(Intent.ACTION_BOOT_COMPLETED), null, null); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_BOOT_COMPLETED); // don't bother monitoring USB if mass storage is not supported on our primary volume if (mPrimaryVolume != null && mPrimaryVolume.allowMassStorage()) { filter.addAction(UsbManager.ACTION_USB_STATE); } mContext.registerReceiver(mBroadcastReceiver, filter, null, null); mHandlerThread = new HandlerThread("MountService"); mHandlerThread.start(); Loading Loading @@ -1323,7 +1280,9 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC if (getUmsEnabling()) { return true; } return doGetShareMethodAvailable("ums"); synchronized (mListeners) { return mUmsAvailable; } } public void setUsbMassStorageEnabled(boolean enable) { Loading Loading
services/java/com/android/server/MountService.java +19 −60 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.content.res.ObbInfo; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; import android.hardware.usb.UsbManager; import android.net.Uri; import android.os.Binder; import android.os.Environment; Loading Loading @@ -152,7 +153,6 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC * 600 series - Unsolicited broadcasts. */ public static final int VolumeStateChange = 605; public static final int ShareAvailabilityChange = 620; public static final int VolumeDiskInserted = 630; public static final int VolumeDiskRemoved = 631; public static final int VolumeBadRemoval = 632; Loading @@ -167,6 +167,7 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC private String mExternalStoragePath; private PackageManagerService mPms; private boolean mUmsEnabling; private boolean mUmsAvailable = false; // Used as a lock for methods that register/unregister listeners. final private ArrayList<MountServiceBinderListener> mListeners = new ArrayList<MountServiceBinderListener>(); Loading Loading @@ -525,6 +526,10 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC } } }.start(); } else if (action.equals(UsbManager.ACTION_USB_STATE)) { boolean available = (intent.getBooleanExtra(UsbManager.USB_CONNECTED, false) && intent.getBooleanExtra(UsbManager.USB_FUNCTION_MASS_STORAGE, false)); notifyShareAvailabilityChange(available); } } }; Loading Loading @@ -654,12 +659,6 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC updatePublicVolumeState(mExternalStoragePath, Environment.MEDIA_REMOVED); } try { boolean avail = doGetShareMethodAvailable("ums"); notifyShareAvailabilityChange("ums", avail); } catch (Exception ex) { Slog.w(TAG, "Failed to get share availability"); } /* * Now that we've done our initialization, release * the hounds! Loading Loading @@ -694,13 +693,6 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC notifyVolumeStateChange( cooked[2], cooked[3], Integer.parseInt(cooked[7]), Integer.parseInt(cooked[10])); } else if (code == VoldResponseCode.ShareAvailabilityChange) { // FMT: NNN Share method <method> now <available|unavailable> boolean avail = false; if (cooked[5].equals("available")) { avail = true; } notifyShareAvailabilityChange(cooked[3], avail); } else if ((code == VoldResponseCode.VolumeDiskInserted) || (code == VoldResponseCode.VolumeDiskRemoved) || (code == VoldResponseCode.VolumeBadRemoval)) { Loading Loading @@ -835,42 +827,6 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC } } private boolean doGetShareMethodAvailable(String method) { ArrayList<String> rsp; try { rsp = mConnector.doCommand("share status " + method); } catch (NativeDaemonConnectorException ex) { Slog.e(TAG, "Failed to determine whether share method " + method + " is available."); return false; } for (String line : rsp) { String[] tok = line.split(" "); if (tok.length < 3) { Slog.e(TAG, "Malformed response to share status " + method); return false; } int code; try { code = Integer.parseInt(tok[0]); } catch (NumberFormatException nfe) { Slog.e(TAG, String.format("Error parsing code %s", tok[0])); return false; } if (code == VoldResponseCode.ShareStatusResult) { if (tok[2].equals("available")) return true; return false; } else { Slog.e(TAG, String.format("Unexpected response code %d", code)); return false; } } Slog.e(TAG, "Got an empty response"); return false; } private int doMountVolume(String path) { int rc = StorageResultCode.OperationSucceeded; Loading Loading @@ -1018,13 +974,9 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC return false; } private void notifyShareAvailabilityChange(String method, final boolean avail) { if (!method.equals("ums")) { Slog.w(TAG, "Ignoring unsupported share method {" + method + "}"); return; } private void notifyShareAvailabilityChange(final boolean avail) { synchronized (mListeners) { mUmsAvailable = avail; for (int i = mListeners.size() -1; i >= 0; i--) { MountServiceBinderListener bl = mListeners.get(i); try { Loading Loading @@ -1189,8 +1141,13 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC // XXX: This will go away soon in favor of IMountServiceObserver mPms = (PackageManagerService) ServiceManager.getService("package"); mContext.registerReceiver(mBroadcastReceiver, new IntentFilter(Intent.ACTION_BOOT_COMPLETED), null, null); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_BOOT_COMPLETED); // don't bother monitoring USB if mass storage is not supported on our primary volume if (mPrimaryVolume != null && mPrimaryVolume.allowMassStorage()) { filter.addAction(UsbManager.ACTION_USB_STATE); } mContext.registerReceiver(mBroadcastReceiver, filter, null, null); mHandlerThread = new HandlerThread("MountService"); mHandlerThread.start(); Loading Loading @@ -1323,7 +1280,9 @@ class MountService extends IMountService.Stub implements INativeDaemonConnectorC if (getUmsEnabling()) { return true; } return doGetShareMethodAvailable("ums"); synchronized (mListeners) { return mUmsAvailable; } } public void setUsbMassStorageEnabled(boolean enable) { Loading