summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2013-10-16 16:21:54 -0700
committerJeff Sharkey <jsharkey@android.com>2013-10-16 16:34:21 -0700
commit5aca2b8dc4f4ff2d466a64587d06666c7bbd9749 (patch)
treeca6b697ce679f12417fbac45df550b7237eadef1 /services
parent905c50a21238aa1de38989f1f9169cf40ebe02d5 (diff)
downloadframeworks_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.java84
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} */