summaryrefslogtreecommitdiff
path: root/media/java/android/mtp/MtpStorageManager.java
diff options
context:
space:
mode:
authorBill Peckham <bpeckham@google.com>2018-09-08 10:06:40 -0700
committerBill Peckham <bpeckham@google.com>2018-09-08 10:06:40 -0700
commita74879d25eb0e4ef53855b57181b038bca75d05f (patch)
tree2a1ef83944343e547bebeae9998b098557225070 /media/java/android/mtp/MtpStorageManager.java
parentb00720941bf751117cf02da40add144683ab51f1 (diff)
Merge QP1A.180823.001
Change-Id: Ia2d6fa811b3c57185c1975db603d59e6eaef73fc
Diffstat (limited to 'media/java/android/mtp/MtpStorageManager.java')
-rw-r--r--media/java/android/mtp/MtpStorageManager.java60
1 files changed, 28 insertions, 32 deletions
diff --git a/media/java/android/mtp/MtpStorageManager.java b/media/java/android/mtp/MtpStorageManager.java
index a36d88d735e3..756e942c33c5 100644
--- a/media/java/android/mtp/MtpStorageManager.java
+++ b/media/java/android/mtp/MtpStorageManager.java
@@ -31,10 +31,8 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Objects;
+import java.util.List;
import java.util.Set;
-import java.util.stream.Stream;
/**
* MtpStorageManager provides functionality for listing, tracking, and notifying MtpServer of
@@ -358,13 +356,13 @@ public class MtpStorageManager {
* Clean up resources used by the storage manager.
*/
public synchronized void close() {
- Stream<MtpObject> objs = Stream.concat(mRoots.values().stream(),
- mObjects.values().stream());
-
- Iterator<MtpObject> iter = objs.iterator();
- while (iter.hasNext()) {
- // Close all FileObservers.
- MtpObject obj = iter.next();
+ for (MtpObject obj : mObjects.values()) {
+ if (obj.getObserver() != null) {
+ obj.getObserver().stopWatching();
+ obj.setObserver(null);
+ }
+ }
+ for (MtpObject obj : mRoots.values()) {
if (obj.getObserver() != null) {
obj.getObserver().stopWatching();
obj.setObserver(null);
@@ -495,49 +493,48 @@ public class MtpStorageManager {
* @param parent object id of the parent. 0 for all objects, 0xFFFFFFFF for all object in root
* @param format format of returned objects. 0 for any format
* @param storageId storage id to look in. 0xFFFFFFFF for all storages
- * @return A stream of matched objects, or null if error
+ * @return A list of matched objects, or null if error
*/
- public synchronized Stream<MtpObject> getObjects(int parent, int format, int storageId) {
+ public synchronized List<MtpObject> getObjects(int parent, int format, int storageId) {
boolean recursive = parent == 0;
+ ArrayList<MtpObject> objs = new ArrayList<>();
+ boolean ret = true;
if (parent == 0xFFFFFFFF)
parent = 0;
if (storageId == 0xFFFFFFFF) {
// query all stores
if (parent == 0) {
// Get the objects of this format and parent in each store.
- ArrayList<Stream<MtpObject>> streamList = new ArrayList<>();
for (MtpObject root : mRoots.values()) {
- streamList.add(getObjects(root, format, recursive));
+ ret &= getObjects(objs, root, format, recursive);
}
- return Stream.of(streamList).flatMap(Collection::stream).reduce(Stream::concat)
- .orElseGet(Stream::empty);
+ return ret ? objs : null;
}
}
MtpObject obj = parent == 0 ? getStorageRoot(storageId) : getObject(parent);
if (obj == null)
return null;
- return getObjects(obj, format, recursive);
+ ret = getObjects(objs, obj, format, recursive);
+ return ret ? objs : null;
}
- private synchronized Stream<MtpObject> getObjects(MtpObject parent, int format, boolean rec) {
+ private synchronized boolean getObjects(List<MtpObject> toAdd, MtpObject parent, int format, boolean rec) {
Collection<MtpObject> children = getChildren(parent);
if (children == null)
- return null;
- Stream<MtpObject> ret = Stream.of(children).flatMap(Collection::stream);
+ return false;
- if (format != 0) {
- ret = ret.filter(o -> o.getFormat() == format);
+ for (MtpObject o : children) {
+ if (format == 0 || o.getFormat() == format) {
+ toAdd.add(o);
+ }
}
+ boolean ret = true;
if (rec) {
// Get all objects recursively.
- ArrayList<Stream<MtpObject>> streamList = new ArrayList<>();
- streamList.add(ret);
for (MtpObject o : children) {
if (o.isDir())
- streamList.add(getObjects(o, format, true));
+ ret &= getObjects(toAdd, o, format, true);
}
- ret = Stream.of(streamList).filter(Objects::nonNull).flatMap(Collection::stream)
- .reduce(Stream::concat).orElseGet(Stream::empty);
}
return ret;
}
@@ -767,12 +764,11 @@ public class MtpStorageManager {
* @return true iff cache is consistent
*/
public synchronized boolean checkConsistency() {
- Stream<MtpObject> objs = Stream.concat(mRoots.values().stream(),
- mObjects.values().stream());
- Iterator<MtpObject> iter = objs.iterator();
+ List<MtpObject> objs = new ArrayList<>();
+ objs.addAll(mRoots.values());
+ objs.addAll(mObjects.values());
boolean ret = true;
- while (iter.hasNext()) {
- MtpObject obj = iter.next();
+ for (MtpObject obj : objs) {
if (!obj.exists()) {
Log.w(TAG, "Object doesn't exist " + obj.getPath() + " " + obj.getId());
ret = false;