Files in archives should be only openable by the quick viewer.
Same for sending (aka sharing).
Test: Tested manually by opening an archive on a device without
a quick viewer.
Bug: 33133419
Change-Id: I848aec3d3cd2b2dac6b423749b797f2b0f2f16c9
(cherry picked from commit 5ba2fd50f0a8f2f9619f8dec076ec7f489f8f4df)
diff --git a/src/com/android/documentsui/base/DocumentInfo.java b/src/com/android/documentsui/base/DocumentInfo.java
index bf01f2f..3185d09 100644
--- a/src/com/android/documentsui/base/DocumentInfo.java
+++ b/src/com/android/documentsui/base/DocumentInfo.java
@@ -217,6 +217,7 @@
+ ", isContainer=" + isContainer()
+ ", isDirectory=" + isDirectory()
+ ", isArchive=" + isArchive()
+ + ", isInArchive=" + isInArchive()
+ ", isPartial=" + isPartial()
+ ", isVirtual=" + isVirtual()
+ ", isDeleteSupported=" + isDeleteSupported()
@@ -254,6 +255,10 @@
return ArchivesProvider.isSupportedArchiveType(mimeType);
}
+ public boolean isInArchive() {
+ return ArchivesProvider.AUTHORITY.equals(authority);
+ }
+
public boolean isPartial() {
return (flags & Document.FLAG_PARTIAL) != 0;
}
diff --git a/src/com/android/documentsui/dirlist/Model.java b/src/com/android/documentsui/dirlist/Model.java
index 5094f41..64dc3d1 100644
--- a/src/com/android/documentsui/dirlist/Model.java
+++ b/src/com/android/documentsui/dirlist/Model.java
@@ -16,6 +16,7 @@
package com.android.documentsui.dirlist;
+import static com.android.documentsui.base.DocumentInfo.getCursorInt;
import static com.android.documentsui.base.DocumentInfo.getCursorString;
import static com.android.documentsui.base.Shared.DEBUG;
import static com.android.documentsui.base.Shared.VERBOSE;
@@ -32,6 +33,7 @@
import android.util.Log;
import com.android.documentsui.DirectoryResult;
+import com.android.documentsui.archives.ArchivesProvider;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.EventListener;
import com.android.documentsui.roots.RootCursorWrapper;
@@ -52,12 +54,14 @@
public class Model {
/**
- * Filter that passes (returns true) all non-virtual, non-partial files.
+ * Filter that passes (returns true) all non-virtual, non-partial files, not archived files.
*/
public static final Predicate<Cursor> CONCRETE_FILE_FILTER = (Cursor c) -> {
- int flags = DocumentInfo.getCursorInt(c, Document.COLUMN_FLAGS);
+ int flags = getCursorInt(c, Document.COLUMN_FLAGS);
+ String authority = getCursorString(c, RootCursorWrapper.COLUMN_AUTHORITY);
return (flags & Document.FLAG_VIRTUAL_DOCUMENT) == 0
- && (flags & Document.FLAG_PARTIAL) == 0;
+ && (flags & Document.FLAG_PARTIAL) == 0
+ && !ArchivesProvider.AUTHORITY.equals(authority);
};
private static final Predicate<Cursor> ANY_FILE_FILTER = (Cursor c) -> true;
diff --git a/src/com/android/documentsui/files/ActionHandler.java b/src/com/android/documentsui/files/ActionHandler.java
index 7c62126..e365c4d 100644
--- a/src/com/android/documentsui/files/ActionHandler.java
+++ b/src/com/android/documentsui/files/ActionHandler.java
@@ -434,6 +434,11 @@
return false;
}
+ if (doc.isInArchive()) {
+ Log.w(TAG, "Can't view archived files.");
+ return false;
+ }
+
if (doc.isContainer()) {
openContainerDocument(doc);
return true;