summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Zemiao Zhu <zemiao@google.com> 2020-04-21 22:44:02 -0700
committer Zemiao Zhu <zemiao@google.com> 2020-04-24 18:21:03 -0700
commit23e1ab5fa18dca4369c5b65a9051e3cdd6c415da (patch)
tree5d2ba09d4403984a742bfd0a54277c40edbdf7d0
parent6754b3a3e75dbd0b9cdf3733020842164c5a97ce (diff)
Add a localPreference for showHiddenFiles and use it in DirectoryLoader.
Bug: 154349585 Test: atest DocumentsUIGoogleTestst Change-Id: I4f2f7db9b148357fba798f20b8c0aca511fa2101
-rw-r--r--res/values/config.xml3
-rw-r--r--src/com/android/documentsui/DirectoryLoader.java5
-rw-r--r--src/com/android/documentsui/MultiRootDocumentsLoader.java9
-rw-r--r--src/com/android/documentsui/base/FilteringCursorWrapper.java20
-rw-r--r--src/com/android/documentsui/prefs/LocalPreferences.java26
5 files changed, 58 insertions, 5 deletions
diff --git a/res/values/config.xml b/res/values/config.xml
index b7a2f3958..494667da0 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -29,6 +29,9 @@
<!-- Indicates if showing as search bar design -->
<bool name="show_search_bar">false</bool>
+ <!-- Indicates if showing hidden files by default -->
+ <bool name="show_hidden_files_by_default">false</bool>
+
<string name="default_root_uri" translatable="false">content://com.android.providers.downloads.documents/root/downloads</string>
<!-- The value is used in sorting process on Drawer menu. If the root's package name
start with it, the item will have higher order than others.-->
diff --git a/src/com/android/documentsui/DirectoryLoader.java b/src/com/android/documentsui/DirectoryLoader.java
index 3bd2c43cc..619f34593 100644
--- a/src/com/android/documentsui/DirectoryLoader.java
+++ b/src/com/android/documentsui/DirectoryLoader.java
@@ -46,6 +46,7 @@ import com.android.documentsui.base.MimeTypes;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.State;
import com.android.documentsui.base.UserId;
+import com.android.documentsui.prefs.LocalPreferences;
import com.android.documentsui.roots.RootCursorWrapper;
import com.android.documentsui.sorting.SortModel;
@@ -178,6 +179,10 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {
}
cursor.registerContentObserver(mObserver);
+ boolean showHiddenFiles = LocalPreferences.getShowHiddenFiles(getContext(),
+ getContext().getResources().getBoolean(R.bool.show_hidden_files_by_default));
+ cursor = new FilteringCursorWrapper(cursor, showHiddenFiles);
+
if (mSearchMode && !mFeatures.isFoldersInSearchResultsEnabled()) {
// There is no findDocumentPath API. Enable filtering on folders in search mode.
cursor = new FilteringCursorWrapper(cursor, null, SEARCH_REJECT_MIMES);
diff --git a/src/com/android/documentsui/MultiRootDocumentsLoader.java b/src/com/android/documentsui/MultiRootDocumentsLoader.java
index e98abbcb1..21748df55 100644
--- a/src/com/android/documentsui/MultiRootDocumentsLoader.java
+++ b/src/com/android/documentsui/MultiRootDocumentsLoader.java
@@ -41,6 +41,7 @@ import com.android.documentsui.base.FilteringCursorWrapper;
import com.android.documentsui.base.Lookup;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.State;
+import com.android.documentsui.prefs.LocalPreferences;
import com.android.documentsui.roots.ProvidersAccess;
import com.android.documentsui.roots.RootCursorWrapper;
@@ -180,6 +181,14 @@ public abstract class MultiRootDocumentsLoader extends AsyncTaskLoader<Directory
// after a query.
continue;
}
+
+ boolean fallback = getContext()
+ .getResources()
+ .getBoolean(R.bool.show_hidden_files_by_default);
+ boolean showHiddenFiles =
+ LocalPreferences.getShowHiddenFiles(getContext(), fallback);
+ cursor = new FilteringCursorWrapper(cursor, showHiddenFiles);
+
final FilteringCursorWrapper filtered = new FilteringCursorWrapper(
cursor, mState.acceptMimes, getRejectMimes(), rejectBefore) {
@Override
diff --git a/src/com/android/documentsui/base/FilteringCursorWrapper.java b/src/com/android/documentsui/base/FilteringCursorWrapper.java
index 209c0f86c..63047134c 100644
--- a/src/com/android/documentsui/base/FilteringCursorWrapper.java
+++ b/src/com/android/documentsui/base/FilteringCursorWrapper.java
@@ -72,6 +72,26 @@ public class FilteringCursorWrapper extends AbstractCursor {
}
}
+ public FilteringCursorWrapper(Cursor cursor, boolean showHiddenFiles) {
+ mCursor = cursor;
+
+ final int count = cursor.getCount();
+ mPosition = new int[count];
+
+ cursor.moveToPosition(-1);
+ while (cursor.moveToNext() && mCount < count) {
+ final String name = getCursorString(cursor, Document.COLUMN_DISPLAY_NAME);
+ if (!showHiddenFiles && name.startsWith(".")) {
+ continue;
+ }
+ mPosition[mCount++] = cursor.getPosition();
+ }
+
+ if (DEBUG && mCount != cursor.getCount()) {
+ Log.d(TAG, "Before filtering " + cursor.getCount() + ", after " + mCount);
+ }
+ }
+
@Override
public Bundle getExtras() {
return mCursor.getExtras();
diff --git a/src/com/android/documentsui/prefs/LocalPreferences.java b/src/com/android/documentsui/prefs/LocalPreferences.java
index 252ec1f13..5503408c1 100644
--- a/src/com/android/documentsui/prefs/LocalPreferences.java
+++ b/src/com/android/documentsui/prefs/LocalPreferences.java
@@ -18,11 +18,13 @@ package com.android.documentsui.prefs;
import static com.android.documentsui.base.State.MODE_UNKNOWN;
-import androidx.annotation.IntDef;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
+import androidx.annotation.IntDef;
+import androidx.annotation.VisibleForTesting;
+
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.State.ViewMode;
@@ -34,23 +36,37 @@ import java.lang.annotation.RetentionPolicy;
*/
public class LocalPreferences {
private static final String ROOT_VIEW_MODE_PREFIX = "rootViewMode-";
+ private static final String SHOW_HIDDEN_FILES = "showHiddenFiles";
public static @ViewMode int getViewMode(Context context, RootInfo root,
@ViewMode int fallback) {
- return getPrefs(context).getInt(createKey(root), fallback);
+ return getPrefs(context).getInt(createKey(ROOT_VIEW_MODE_PREFIX, root), fallback);
+ }
+
+ /** Returns if hidden files should be shown. */
+ public static boolean getShowHiddenFiles(Context context, boolean fallback) {
+ return getPrefs(context).getBoolean(SHOW_HIDDEN_FILES, fallback);
}
public static void setViewMode(Context context, RootInfo root, @ViewMode int viewMode) {
assert(viewMode != MODE_UNKNOWN);
- getPrefs(context).edit().putInt(createKey(root), viewMode).apply();
+ getPrefs(context).edit().putInt(createKey(ROOT_VIEW_MODE_PREFIX, root), viewMode).apply();
+ }
+
+ /** Sets if hidden files should be shown. */
+ @VisibleForTesting
+ public static void setShowHiddenFiles(Context context, boolean showHiddenFiles) {
+ getPrefs(context).edit()
+ .putBoolean(SHOW_HIDDEN_FILES, showHiddenFiles)
+ .apply();
}
private static SharedPreferences getPrefs(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context);
}
- private static String createKey(RootInfo root) {
- return ROOT_VIEW_MODE_PREFIX + root.authority + root.rootId;
+ private static String createKey(String prefix, RootInfo root) {
+ return prefix + root.authority + root.rootId;
}
public static final int PERMISSION_ASK = 0;