diff options
Diffstat (limited to 'media/java/android/mtp/MtpStorageManager.java')
-rw-r--r-- | media/java/android/mtp/MtpStorageManager.java | 60 |
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; |