diff options
author | Jeff Sharkey <jsharkey@android.com> | 2013-10-16 16:21:54 -0700 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2013-10-16 16:34:21 -0700 |
commit | 5aca2b8dc4f4ff2d466a64587d06666c7bbd9749 (patch) | |
tree | ca6b697ce679f12417fbac45df550b7237eadef1 /services | |
parent | 905c50a21238aa1de38989f1f9169cf40ebe02d5 (diff) | |
download | frameworks_base-5aca2b8dc4f4ff2d466a64587d06666c7bbd9749.zip frameworks_base-5aca2b8dc4f4ff2d466a64587d06666c7bbd9749.tar.gz frameworks_base-5aca2b8dc4f4ff2d466a64587d06666c7bbd9749.tar.bz2 |
Plumb through physical device UUID and label.
vold now parse out UUID and label for inserted physical devices,
and reports them to framework. Add these to hidden StorageVolume
class for use by DocumentsUI and MediaProvider.
Remove last JNI method in FileUtils!
Bug: 11175082
Change-Id: I1cfcd1ade61767b103f693319ea2600008ee2e3c
Diffstat (limited to 'services')
-rw-r--r-- | services/java/com/android/server/MountService.java | 84 |
1 files changed, 57 insertions, 27 deletions
diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java index c7ca1ea..7308b7d 100644 --- a/services/java/com/android/server/MountService.java +++ b/services/java/com/android/server/MountService.java @@ -56,12 +56,14 @@ import android.os.storage.StorageResultCode; import android.os.storage.StorageVolume; import android.text.TextUtils; import android.util.AttributeSet; +import android.util.Log; import android.util.Slog; import android.util.Xml; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.IMediaContainerService; +import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import com.android.internal.util.XmlUtils; import com.android.server.NativeDaemonConnector.Command; @@ -83,6 +85,7 @@ import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; import java.security.spec.KeySpec; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -173,6 +176,8 @@ class MountService extends IMountService.Stub * 600 series - Unsolicited broadcasts. */ public static final int VolumeStateChange = 605; + public static final int VolumeUuidChange = 613; + public static final int VolumeUserLabelChange = 614; public static final int VolumeDiskInserted = 630; public static final int VolumeDiskRemoved = 631; public static final int VolumeBadRemoval = 632; @@ -801,6 +806,26 @@ class MountService extends IMountService.Stub notifyVolumeStateChange( cooked[2], cooked[3], Integer.parseInt(cooked[7]), Integer.parseInt(cooked[10])); + } else if (code == VoldResponseCode.VolumeUuidChange) { + // Format: nnn <label> <path> <uuid> + final String path = cooked[2]; + final String uuid = (cooked.length > 3) ? cooked[3] : null; + + final StorageVolume vol = mVolumesByPath.get(path); + if (vol != null) { + vol.setUuid(uuid); + } + + } else if (code == VoldResponseCode.VolumeUserLabelChange) { + // Format: nnn <label> <path> <label> + final String path = cooked[2]; + final String userLabel = (cooked.length > 3) ? cooked[3] : null; + + final StorageVolume vol = mVolumesByPath.get(path); + if (vol != null) { + vol.setUserLabel(userLabel); + } + } else if ((code == VoldResponseCode.VolumeDiskInserted) || (code == VoldResponseCode.VolumeDiskRemoved) || (code == VoldResponseCode.VolumeBadRemoval)) { @@ -2743,54 +2768,59 @@ class MountService extends IMountService.Stub } @Override - protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { - if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP) != PackageManager.PERMISSION_GRANTED) { - pw.println("Permission Denial: can't dump ActivityManager from from pid=" - + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid() - + " without permission " + android.Manifest.permission.DUMP); - return; - } + protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) { + mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, TAG); - synchronized (mObbMounts) { - pw.println(" mObbMounts:"); + final IndentingPrintWriter pw = new IndentingPrintWriter(writer, " ", 160); - final Iterator<Entry<IBinder, List<ObbState>>> binders = mObbMounts.entrySet().iterator(); + synchronized (mObbMounts) { + pw.println("mObbMounts:"); + pw.increaseIndent(); + final Iterator<Entry<IBinder, List<ObbState>>> binders = mObbMounts.entrySet() + .iterator(); while (binders.hasNext()) { Entry<IBinder, List<ObbState>> e = binders.next(); - pw.print(" Key="); pw.println(e.getKey().toString()); + pw.println(e.getKey() + ":"); + pw.increaseIndent(); final List<ObbState> obbStates = e.getValue(); for (final ObbState obbState : obbStates) { - pw.print(" "); pw.println(obbState.toString()); + pw.println(obbState); } + pw.decreaseIndent(); } + pw.decreaseIndent(); - pw.println(""); - pw.println(" mObbPathToStateMap:"); + pw.println(); + pw.println("mObbPathToStateMap:"); + pw.increaseIndent(); final Iterator<Entry<String, ObbState>> maps = mObbPathToStateMap.entrySet().iterator(); while (maps.hasNext()) { final Entry<String, ObbState> e = maps.next(); - pw.print(" "); pw.print(e.getKey()); - pw.print(" -> "); pw.println(e.getValue().toString()); + pw.print(e.getKey()); + pw.print(" -> "); + pw.println(e.getValue()); } + pw.decreaseIndent(); } - pw.println(""); - synchronized (mVolumesLock) { - pw.println(" mVolumes:"); - - final int N = mVolumes.size(); - for (int i = 0; i < N; i++) { - final StorageVolume v = mVolumes.get(i); - pw.print(" "); - pw.println(v.toString()); - pw.println(" state=" + mVolumeStates.get(v.getPath())); + pw.println(); + pw.println("mVolumes:"); + pw.increaseIndent(); + for (StorageVolume volume : mVolumes) { + pw.println(volume); + pw.increaseIndent(); + pw.println("Current state: " + mVolumeStates.get(volume.getPath())); + pw.decreaseIndent(); } + pw.decreaseIndent(); } pw.println(); - pw.println(" mConnection:"); + pw.println("mConnection:"); + pw.increaseIndent(); mConnector.dump(fd, pw, args); + pw.decreaseIndent(); } /** {@inheritDoc} */ |