diff options
| author | 2015-09-16 15:07:31 -0700 | |
|---|---|---|
| committer | 2015-09-23 12:25:13 -0700 | |
| commit | 83df8c072ddd01a5adc11da0869103c4645e6d76 (patch) | |
| tree | 8815d0d8c9412976810bdd772587e7c6ad5f0a3e | |
| parent | bf5d95da0d3e4a90fd9b4f705ed697714b28f0a8 (diff) | |
Merge BROWSE and BROWSE_ALL actions.
Open Files app when exploring from settings.
Force visibility of file size in this mode.
Don't hide empty media providers.
Bug: 24136618, 24140864
Change-Id: I6f238586725f9b6255812e3082bb8d8655219a7d
10 files changed, 105 insertions, 146 deletions
diff --git a/core/java/android/os/storage/VolumeInfo.java b/core/java/android/os/storage/VolumeInfo.java index 688859479713..c368e5a24a1b 100644 --- a/core/java/android/os/storage/VolumeInfo.java +++ b/core/java/android/os/storage/VolumeInfo.java @@ -438,6 +438,8 @@ public class VolumeInfo implements Parcelable { final Intent intent = new Intent(DocumentsContract.ACTION_BROWSE_DOCUMENT_ROOT); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(uri); + intent.putExtra(DocumentsContract.EXTRA_SHOW_FILESIZE, true); + intent.putExtra(DocumentsContract.EXTRA_SHOW_ADVANCED, true); return intent; } diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java index 59609f94546a..1a83cd567dc0 100644 --- a/core/java/android/provider/DocumentsContract.java +++ b/core/java/android/provider/DocumentsContract.java @@ -93,6 +93,9 @@ public final class DocumentsContract { public static final String EXTRA_SHOW_ADVANCED = "android.content.extra.SHOW_ADVANCED"; /** {@hide} */ + public static final String EXTRA_SHOW_FILESIZE = "android.content.extra.SHOW_FILESIZE"; + + /** {@hide} */ public static final String EXTRA_TARGET_URI = "android.content.extra.TARGET_URI"; /** @@ -266,7 +269,7 @@ public final class DocumentsContract { * writability of a document may change over time, for example due to * remote access changes. This flag indicates that a document client can * expect {@link ContentResolver#openOutputStream(Uri)} to succeed. - * + * * @see #COLUMN_FLAGS */ public static final int FLAG_SUPPORTS_WRITE = 1 << 1; diff --git a/packages/DocumentsUI/AndroidManifest.xml b/packages/DocumentsUI/AndroidManifest.xml index 97bc8fd4d1f4..ac6f950a0a82 100644 --- a/packages/DocumentsUI/AndroidManifest.xml +++ b/packages/DocumentsUI/AndroidManifest.xml @@ -35,11 +35,6 @@ <action android:name="android.intent.action.OPEN_DOCUMENT_TREE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> - <intent-filter> - <action android:name="android.provider.action.BROWSE_DOCUMENT_ROOT" /> - <category android:name="android.intent.category.DEFAULT" /> - <data android:mimeType="vnd.android.document/root" /> - </intent-filter> </activity> <activity @@ -63,6 +58,11 @@ <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> + <intent-filter> + <action android:name="android.provider.action.BROWSE_DOCUMENT_ROOT" /> + <category android:name="android.intent.category.DEFAULT" /> + <data android:mimeType="vnd.android.document/root" /> + </intent-filter> </activity> <provider diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java index 4d0a7eb67483..1585908e5639 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java @@ -16,13 +16,6 @@ package com.android.documentsui; -import static com.android.documentsui.BaseActivity.State.ACTION_BROWSE; -import static com.android.documentsui.BaseActivity.State.ACTION_CREATE; -import static com.android.documentsui.BaseActivity.State.ACTION_GET_CONTENT; -import static com.android.documentsui.BaseActivity.State.ACTION_MANAGE; -import static com.android.documentsui.BaseActivity.State.ACTION_OPEN; -import static com.android.documentsui.BaseActivity.State.ACTION_OPEN_COPY_DESTINATION; -import static com.android.documentsui.BaseActivity.State.ACTION_OPEN_TREE; import static com.android.documentsui.DirectoryFragment.ANIM_DOWN; import static com.android.documentsui.DirectoryFragment.ANIM_NONE; import static com.android.documentsui.DirectoryFragment.ANIM_SIDE; @@ -125,22 +118,6 @@ abstract class BaseActivity extends Activity { } @Override - public void onResume() { - super.onResume(); - - final State state = getDisplayState(); - final RootInfo root = getCurrentRoot(); - - // If we're browsing a specific root, and that root went away, then we - // have no reason to hang around - if (state.action == State.ACTION_BROWSE && root != null) { - if (mRoots.getRootBlocking(root.authority, root.rootId) == null) { - finish(); - } - } - } - - @Override public boolean onCreateOptionsMenu(Menu menu) { boolean showMenu = super.onCreateOptionsMenu(menu); @@ -178,8 +155,10 @@ abstract class BaseActivity extends Activity { State state = getDisplayState(); sortSize.setVisible(state.showSize); // Only sort by size when visible + fileSize.setVisible(!state.showSize); grid.setVisible(state.derivedMode != State.MODE_GRID); list.setVisible(state.derivedMode != State.MODE_LIST); + advanced.setVisible(!mState.showAdvanced); settings.setVisible((root.flags & Root.FLAG_HAS_SETTINGS) != 0); return shown; @@ -189,13 +168,17 @@ abstract class BaseActivity extends Activity { State state = new State(); final Intent intent = getIntent(); - final String action = intent.getAction(); state.localOnly = intent.getBooleanExtra(Intent.EXTRA_LOCAL_ONLY, false); + + state.forceSize = intent.getBooleanExtra(DocumentsContract.EXTRA_SHOW_FILESIZE, false); + state.showSize = state.forceSize || LocalPreferences.getDisplayFileSize(this); + state.forceAdvanced = intent.getBooleanExtra(DocumentsContract.EXTRA_SHOW_ADVANCED, false); - state.showAdvanced = state.forceAdvanced || - LocalPreferences.getDisplayAdvancedDevices(this); + state.showAdvanced = state.forceAdvanced + || LocalPreferences.getDisplayAdvancedDevices(this); + state.initAcceptMimes(intent); state.excludedAuthorities = getExcludedAuthorities(); return state; @@ -219,7 +202,7 @@ abstract class BaseActivity extends Activity { if (mRoots.isRecentsRoot(root)) { onCurrentDirectoryChanged(ANIM_SIDE); } else { - new PickRootTask(root).executeOnExecutor(getCurrentExecutor()); + new PickRootTask(root).executeOnExecutor(getExecutorForCurrentDirectory()); } } @@ -399,6 +382,7 @@ abstract class BaseActivity extends Activity { public int derivedSortOrder = SORT_ORDER_DISPLAY_NAME; public boolean allowMultiple; + public boolean forceSize ; public boolean showSize; public boolean localOnly ; public boolean forceAdvanced ; @@ -429,7 +413,6 @@ abstract class BaseActivity extends Activity { public static final int ACTION_OPEN_TREE = 4; public static final int ACTION_MANAGE = 5; public static final int ACTION_BROWSE = 6; - public static final int ACTION_BROWSE_ALL = 7; public static final int ACTION_OPEN_COPY_DESTINATION = 8; public static final int MODE_UNKNOWN = 0; @@ -441,6 +424,15 @@ abstract class BaseActivity extends Activity { public static final int SORT_ORDER_LAST_MODIFIED = 2; public static final int SORT_ORDER_SIZE = 3; + public void initAcceptMimes(Intent intent) { + if (intent.hasExtra(Intent.EXTRA_MIME_TYPES)) { + acceptMimes = intent.getStringArrayExtra(Intent.EXTRA_MIME_TYPES); + } else { + String glob = intent.getType(); + acceptMimes = new String[] { glob != null ? glob : "*/*" }; + } + } + @Override public int describeContents() { return 0; @@ -453,6 +445,7 @@ abstract class BaseActivity extends Activity { out.writeStringArray(acceptMimes); out.writeInt(userSortOrder); out.writeInt(allowMultiple ? 1 : 0); + out.writeInt(forceSize ? 1 : 0); out.writeInt(showSize ? 1 : 0); out.writeInt(localOnly ? 1 : 0); out.writeInt(forceAdvanced ? 1 : 0); @@ -475,6 +468,7 @@ abstract class BaseActivity extends Activity { state.acceptMimes = in.readStringArray(); state.userSortOrder = in.readInt(); state.allowMultiple = in.readInt() != 0; + state.forceSize = in.readInt() != 0; state.showSize = in.readInt() != 0; state.localOnly = in.readInt() != 0; state.forceAdvanced = in.readInt() != 0; @@ -562,7 +556,7 @@ abstract class BaseActivity extends Activity { return getDisplayState().stack.peek(); } - public Executor getCurrentExecutor() { + public Executor getExecutorForCurrentDirectory() { final DocumentInfo cwd = getCurrentDirectory(); if (cwd != null && cwd.authority != null) { return ProviderExecutor.forAuthority(cwd.authority); diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java index 1a17b6c63997..ea8ecf54f31c 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java @@ -17,7 +17,6 @@ package com.android.documentsui; import static com.android.documentsui.BaseActivity.State.ACTION_BROWSE; -import static com.android.documentsui.BaseActivity.State.ACTION_BROWSE_ALL; import static com.android.documentsui.BaseActivity.State.ACTION_CREATE; import static com.android.documentsui.BaseActivity.State.ACTION_MANAGE; import static com.android.documentsui.BaseActivity.State.MODE_GRID; @@ -101,7 +100,6 @@ import com.android.documentsui.RecentsProvider.StateColumns; import com.android.documentsui.model.DocumentInfo; import com.android.documentsui.model.DocumentStack; import com.android.documentsui.model.RootInfo; -import com.android.internal.util.Preconditions; import com.google.common.collect.Lists; @@ -1554,9 +1552,9 @@ public class DirectoryFragment extends Fragment { } private FragmentTuner pickFragmentTuner(final State state) { - return state.action == ACTION_BROWSE_ALL + return state.action == ACTION_BROWSE ? new FilesTuner() - : new DefaultTuner(state); + : new DefaultTuner(state.action); } /** @@ -1593,15 +1591,14 @@ public class DirectoryFragment extends Fragment { */ private static final class DefaultTuner implements FragmentTuner { - private final State mState; + private final boolean mManaging; - public DefaultTuner(State state) { - mState = state; + public DefaultTuner(int action) { + mManaging = (action == ACTION_MANAGE); } @Override public void updateActionMenu(Menu menu, int dirType, boolean canDelete) { - Preconditions.checkState(mState.action != ACTION_BROWSE_ALL); final MenuItem open = menu.findItem(R.id.menu_open); final MenuItem share = menu.findItem(R.id.menu_share); @@ -1610,14 +1607,11 @@ public class DirectoryFragment extends Fragment { final MenuItem moveTo = menu.findItem(R.id.menu_move_to); final MenuItem copyToClipboard = menu.findItem(R.id.menu_copy_to_clipboard); - final boolean manageOrBrowse = (mState.action == ACTION_MANAGE - || mState.action == ACTION_BROWSE); - - open.setVisible(!manageOrBrowse); - share.setVisible(manageOrBrowse); - delete.setVisible(manageOrBrowse && canDelete); + open.setVisible(!mManaging); + share.setVisible(mManaging); + delete.setVisible(mManaging && canDelete); // Disable copying from the Recents view. - copyTo.setVisible(manageOrBrowse && dirType != TYPE_RECENT_OPEN); + copyTo.setVisible(mManaging && dirType != TYPE_RECENT_OPEN); moveTo.setVisible(SystemProperties.getBoolean("debug.documentsui.enable_move", false)); // Only shown in files mode. @@ -1634,6 +1628,7 @@ public class DirectoryFragment extends Fragment { private static final class FilesTuner implements FragmentTuner { @Override public void updateActionMenu(Menu menu, int dirType, boolean canDelete) { + menu.findItem(R.id.menu_share).setVisible(true); menu.findItem(R.id.menu_delete).setVisible(canDelete); menu.findItem(R.id.menu_copy_to_clipboard).setVisible(true); diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java index 8b2b4f2dc6ae..dbfcf407e6bd 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java @@ -16,7 +16,6 @@ package com.android.documentsui; -import static com.android.documentsui.BaseActivity.State.ACTION_BROWSE; import static com.android.documentsui.BaseActivity.State.ACTION_CREATE; import static com.android.documentsui.BaseActivity.State.ACTION_GET_CONTENT; import static com.android.documentsui.BaseActivity.State.ACTION_OPEN; @@ -28,7 +27,6 @@ import static com.android.documentsui.DirectoryFragment.ANIM_NONE; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; -import android.content.ActivityNotFoundException; import android.content.ClipData; import android.content.ComponentName; import android.content.ContentProviderClient; @@ -44,7 +42,6 @@ import android.os.AsyncTask; import android.os.Bundle; import android.os.Parcelable; import android.provider.DocumentsContract; -import android.provider.DocumentsContract.Root; import android.util.Log; import android.view.Menu; import android.view.MenuItem; @@ -87,7 +84,7 @@ public class DocumentsActivity extends BaseActivity { super.onCreate(icicle); final Resources res = getResources(); - mShowAsDialog = res.getBoolean(R.bool.show_as_dialog) && mState.action != ACTION_BROWSE; + mShowAsDialog = res.getBoolean(R.bool.show_as_dialog); if (!mShowAsDialog) { setTheme(R.style.DocumentsNonDialogTheme); @@ -123,14 +120,6 @@ public class DocumentsActivity extends BaseActivity { setActionBar(mToolbar); - // Hide roots when we're managing a specific root - if (mState.action == ACTION_BROWSE) { - mDrawer.lockClosed(); - if (mShowAsDialog) { - findViewById(R.id.container_roots).setVisibility(View.GONE); - } - } - if (mState.action == ACTION_CREATE) { final String mimeType = getIntent().getType(); final String title = getIntent().getStringExtra(Intent.EXTRA_TITLE); @@ -156,12 +145,7 @@ public class DocumentsActivity extends BaseActivity { // In this case, we set the activity title in AsyncTask.onPostExecute(). To prevent // talkback from reading aloud the default title, we clear it here. setTitle(""); - if (mState.action == ACTION_BROWSE) { - final Uri rootUri = getIntent().getData(); - new RestoreRootTask(rootUri).executeOnExecutor(getCurrentExecutor()); - } else { - new RestoreStackTask().execute(); - } + new RestoreStackTask().execute(); } else { onCurrentDirectoryChanged(ANIM_NONE); } @@ -181,8 +165,6 @@ public class DocumentsActivity extends BaseActivity { state.action = ACTION_GET_CONTENT; } else if (Intent.ACTION_OPEN_DOCUMENT_TREE.equals(action)) { state.action = ACTION_OPEN_TREE; - } else if (DocumentsContract.ACTION_BROWSE_DOCUMENT_ROOT.equals(action)) { - state.action = ACTION_BROWSE; } else if (DocumentsIntent.ACTION_OPEN_COPY_DESTINATION.equals(action)) { state.action = ACTION_OPEN_COPY_DESTINATION; } @@ -192,20 +174,6 @@ public class DocumentsActivity extends BaseActivity { Intent.EXTRA_ALLOW_MULTIPLE, false); } - if (state.action == ACTION_BROWSE) { - state.acceptMimes = new String[] { "*/*" }; - state.allowMultiple = true; - } else if (intent.hasExtra(Intent.EXTRA_MIME_TYPES)) { - state.acceptMimes = intent.getStringArrayExtra(Intent.EXTRA_MIME_TYPES); - } else { - state.acceptMimes = new String[] { intent.getType() }; - } - - if (state.action == ACTION_BROWSE) { - state.showSize = true; - } else { - state.showSize = LocalPreferences.getDisplayFileSize(this); - } if (state.action == ACTION_OPEN_COPY_DESTINATION) { state.directoryCopy = intent.getBooleanExtra( BaseActivity.DocumentsIntent.EXTRA_DIRECTORY_COPY, false); @@ -357,11 +325,7 @@ public class DocumentsActivity extends BaseActivity { final MenuItem fileSize = menu.findItem(R.id.menu_file_size); final MenuItem settings = menu.findItem(R.id.menu_settings); - // File size is locked visible for browse because that is the action triggered by Settings, - // where the user is trying to find large files to clean up. - // TODO: instead of setting this according to the action, use a local preference, but - // provide a @hide extra to let callers like Settings force-enable size visibility. - boolean fileSizeVisible = mState.action != ACTION_BROWSE; + boolean fileSizeVisible = mState.showSize && !mState.forceSize; if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE || mState.action == ACTION_OPEN_COPY_DESTINATION) { @@ -383,11 +347,9 @@ public class DocumentsActivity extends BaseActivity { createDir.setVisible(false); } - advanced.setVisible(mState.action != ACTION_BROWSE && !mState.forceAdvanced); + advanced.setVisible(!mState.forceAdvanced); fileSize.setVisible(fileSizeVisible); - - settings.setVisible(mState.action == ACTION_BROWSE - && (root.flags & Root.FLAG_HAS_SETTINGS) != 0); + settings.setVisible(false); return true; } @@ -446,11 +408,11 @@ public class DocumentsActivity extends BaseActivity { } void onSaveRequested(DocumentInfo replaceTarget) { - new ExistingFinishTask(replaceTarget.derivedUri).executeOnExecutor(getCurrentExecutor()); + new ExistingFinishTask(replaceTarget.derivedUri).executeOnExecutor(getExecutorForCurrentDirectory()); } void onSaveRequested(String mimeType, String displayName) { - new CreateFinishTask(mimeType, displayName).executeOnExecutor(getCurrentExecutor()); + new CreateFinishTask(mimeType, displayName).executeOnExecutor(getExecutorForCurrentDirectory()); } @Override @@ -466,21 +428,10 @@ public class DocumentsActivity extends BaseActivity { openDirectory(doc); } else if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT) { // Explicit file picked, return - new ExistingFinishTask(doc.derivedUri).executeOnExecutor(getCurrentExecutor()); + new ExistingFinishTask(doc.derivedUri).executeOnExecutor(getExecutorForCurrentDirectory()); } else if (mState.action == ACTION_CREATE) { // Replace selected file SaveFragment.get(fm).setReplaceTarget(doc); - } else if (mState.action == ACTION_BROWSE) { - // Go straight to viewing - final Intent view = new Intent(Intent.ACTION_VIEW); - view.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - view.setData(doc.derivedUri); - - try { - startActivity(view); - } catch (ActivityNotFoundException ex) { - Toast.makeText(this, R.string.toast_no_application, Toast.LENGTH_SHORT).show(); - } } } @@ -492,7 +443,7 @@ public class DocumentsActivity extends BaseActivity { for (int i = 0; i < size; i++) { uris[i] = docs.get(i).derivedUri; } - new ExistingFinishTask(uris).executeOnExecutor(getCurrentExecutor()); + new ExistingFinishTask(uris).executeOnExecutor(getExecutorForCurrentDirectory()); } } @@ -507,7 +458,7 @@ public class DocumentsActivity extends BaseActivity { // Should not be reached. throw new IllegalStateException("Invalid mState.action."); } - new PickFinishTask(result).executeOnExecutor(getCurrentExecutor()); + new PickFinishTask(result).executeOnExecutor(getExecutorForCurrentDirectory()); } @Override diff --git a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java index c1362c87e620..7e9531b777fa 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java @@ -16,8 +16,9 @@ package com.android.documentsui; -import static com.android.documentsui.DirectoryFragment.ANIM_DOWN; import static com.android.documentsui.DirectoryFragment.ANIM_NONE; +import static com.android.documentsui.Shared.DEBUG; +import static com.android.internal.util.Preconditions.checkArgument; import android.app.Activity; import android.app.FragmentManager; @@ -25,11 +26,9 @@ import android.content.ActivityNotFoundException; import android.content.ClipData; import android.content.ContentResolver; import android.content.ContentValues; -import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.provider.DocumentsContract; import android.support.annotation.Nullable; import android.util.Log; import android.view.KeyEvent; @@ -46,7 +45,6 @@ import com.android.documentsui.model.DocumentInfo; import com.android.documentsui.model.DocumentStack; import com.android.documentsui.model.DurableUtils; import com.android.documentsui.model.RootInfo; -import com.android.internal.util.Preconditions; import java.util.ArrayList; import java.util.Arrays; @@ -58,7 +56,6 @@ import java.util.List; public class FilesActivity extends BaseActivity { public static final String TAG = "FilesActivity"; - static final boolean DEBUG = false; private Toolbar mToolbar; private Spinner mToolbarStack; @@ -74,8 +71,6 @@ public class FilesActivity extends BaseActivity { public void onCreate(Bundle icicle) { super.onCreate(icicle); - final Context context = this; - mToolbar = (Toolbar) findViewById(R.id.toolbar); mStackAdapter = new StackAdapter(); @@ -90,7 +85,16 @@ public class FilesActivity extends BaseActivity { RootsFragment.show(getFragmentManager(), null); if (!mState.restored) { - new RestoreStackTask().execute(); + Uri rootUri = getIntent().getData(); + + // If we've got a specific root to display, restore that root using a dedicated + // authority. That way a misbehaving provider won't result in an ANR. + if (rootUri != null) { + new RestoreRootTask(rootUri).executeOnExecutor( + ProviderExecutor.forAuthority(rootUri.getAuthority())); + } else { + new RestoreStackTask().execute(); + } // Show a failure dialog if there was a failed operation. final Intent intent = getIntent(); @@ -115,22 +119,16 @@ public class FilesActivity extends BaseActivity { final Intent intent = getIntent(); - state.action = State.ACTION_BROWSE_ALL; - state.acceptMimes = new String[] { intent.getType() }; + state.action = State.ACTION_BROWSE; state.allowMultiple = true; - // These options are specific to the DocumentsActivity. - Preconditions.checkArgument( - !intent.hasExtra(Intent.EXTRA_LOCAL_ONLY)); - Preconditions.checkArgument( - !intent.hasExtra(DocumentsContract.EXTRA_SHOW_ADVANCED)); - - state.showAdvanced = LocalPreferences.getDisplayAdvancedDevices(this); - state.showSize = LocalPreferences.getDisplayFileSize(this); + // Options specific to the DocumentsActivity. + checkArgument(!intent.hasExtra(Intent.EXTRA_LOCAL_ONLY)); final DocumentStack stack = intent.getParcelableExtra(CopyService.EXTRA_STACK); - if (stack != null) + if (stack != null) { state.stack = stack; + } return state; } @@ -142,6 +140,21 @@ public class FilesActivity extends BaseActivity { } @Override + public void onResume() { + super.onResume(); + + final RootInfo root = getCurrentRoot(); + + // If we're browsing a specific root, and that root went away, then we + // have no reason to hang around. + // TODO: Rather than just disappearing, maybe we should inform + // the user what has happened, let them close us. Less surprising. + if (mRoots.getRootBlocking(root.authority, root.rootId) == null) { + finish(); + } + } + + @Override public void updateActionBar() { final RootInfo root = getCurrentRoot(); @@ -194,12 +207,8 @@ public class FilesActivity extends BaseActivity { public boolean onPrepareOptionsMenu(Menu menu) { boolean shown = super.onPrepareOptionsMenu(menu); - menu.findItem(R.id.menu_file_size).setVisible(true); - menu.findItem(R.id.menu_advanced).setVisible(true); - final MenuItem pasteFromCb = menu.findItem(R.id.menu_paste_from_clipboard); final MenuItem createDir = menu.findItem(R.id.menu_create_dir); - final MenuItem settings = menu.findItem(R.id.menu_settings); boolean canCreateDir = canCreateDirectory(); diff --git a/packages/DocumentsUI/src/com/android/documentsui/ManageRootActivity.java b/packages/DocumentsUI/src/com/android/documentsui/ManageRootActivity.java index 798992b470e3..f5b1d8e67dd4 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/ManageRootActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/ManageRootActivity.java @@ -87,7 +87,7 @@ public class ManageRootActivity extends BaseActivity { // talkback from reading aloud the default title, we clear it here. setTitle(""); final Uri rootUri = getIntent().getData(); - new RestoreRootTask(rootUri).executeOnExecutor(getCurrentExecutor()); + new RestoreRootTask(rootUri).executeOnExecutor(getExecutorForCurrentDirectory()); } else { onCurrentDirectoryChanged(ANIM_NONE); } diff --git a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java index 05f7d8dd11e3..cb46bca741a1 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java +++ b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java @@ -17,6 +17,7 @@ package com.android.documentsui; import static com.android.documentsui.Shared.TAG; +import static com.android.documentsui.Shared.DEBUG; import android.content.ContentProviderClient; import android.content.ContentResolver; @@ -58,8 +59,6 @@ import java.util.concurrent.TimeUnit; * Cache of known storage backends and their roots. */ public class RootsCache { - private static final boolean LOGD = false; - public static final Uri sNotificationUri = Uri.parse( "content://com.android.documentsui.roots/"); @@ -91,7 +90,7 @@ public class RootsCache { @Override public void onChange(boolean selfChange, Uri uri) { - if (LOGD) Log.d(TAG, "Updating roots due to change at " + uri); + if (DEBUG) Log.d(TAG, "Updating roots due to change at " + uri); updateAuthorityAsync(uri.getAuthority()); } } @@ -148,7 +147,7 @@ public class RootsCache { final ContentResolver resolver = mContext.getContentResolver(); synchronized (mLock) { for (String authority : mStoppedAuthorities) { - if (LOGD) Log.d(TAG, "Loading stopped authority " + authority); + if (DEBUG) Log.d(TAG, "Loading stopped authority " + authority); mRoots.putAll(authority, loadRootsForAuthority(resolver, authority)); } mStoppedAuthorities.clear(); @@ -199,7 +198,8 @@ public class RootsCache { } final long delta = SystemClock.elapsedRealtime() - start; - Log.d(TAG, "Update found " + mTaskRoots.size() + " roots in " + delta + "ms"); + if (DEBUG) + Log.d(TAG, "Update found " + mTaskRoots.size() + " roots in " + delta + "ms"); synchronized (mLock) { mRoots = mTaskRoots; mStoppedAuthorities = mTaskStoppedAuthorities; @@ -213,7 +213,7 @@ public class RootsCache { // Ignore stopped packages for now; we might query them // later during UI interaction. if ((info.applicationInfo.flags & ApplicationInfo.FLAG_STOPPED) != 0) { - if (LOGD) Log.d(TAG, "Ignoring stopped authority " + info.authority); + if (DEBUG) Log.d(TAG, "Ignoring stopped authority " + info.authority); mTaskStoppedAuthorities.add(info.authority); return; } @@ -223,7 +223,7 @@ public class RootsCache { if (mFilterPackage != null && !mFilterPackage.equals(info.packageName)) { synchronized (mLock) { if (mTaskRoots.putAll(info.authority, mRoots.get(info.authority))) { - if (LOGD) Log.d(TAG, "Used cached roots for " + info.authority); + if (DEBUG) Log.d(TAG, "Used cached roots for " + info.authority); cacheHit = true; } } @@ -241,7 +241,7 @@ public class RootsCache { * Bring up requested provider and query for all active roots. */ private Collection<RootInfo> loadRootsForAuthority(ContentResolver resolver, String authority) { - if (LOGD) Log.d(TAG, "Loading roots for " + authority); + if (DEBUG) Log.d(TAG, "Loading roots for " + authority); synchronized (mObservedAuthorities) { if (mObservedAuthorities.add(authority)) { @@ -370,10 +370,15 @@ public class RootsCache { // Exclude downloads roots that don't support directory creation // TODO: Add flag to check the root supports directory creation or not. if (state.directoryCopy && root.isDownloads()) continue; - // Only show empty roots when creating - if ((state.action != State.ACTION_CREATE || + + // Only show empty roots when creating, or in browse mode. + if (empty && (state.action != State.ACTION_BROWSE || + state.action != State.ACTION_CREATE || state.action != State.ACTION_OPEN_TREE || - state.action != State.ACTION_OPEN_COPY_DESTINATION) && empty) continue; + state.action != State.ACTION_OPEN_COPY_DESTINATION)) { + if (DEBUG) Log.i(TAG, "Skipping empty root: " + root); + continue; + } // Only include roots that serve requested content final boolean overlap = @@ -385,7 +390,7 @@ public class RootsCache { // Exclude roots from the calling package. if (state.excludedAuthorities.contains(root.authority)) { - if (LOGD) Log.d(TAG, "Excluding root " + root.authority + " from calling package."); + if (DEBUG) Log.d(TAG, "Excluding root " + root.authority + " from calling package."); continue; } diff --git a/packages/DocumentsUI/src/com/android/documentsui/Shared.java b/packages/DocumentsUI/src/com/android/documentsui/Shared.java index 0c1ebc16f1df..9c884d4ef8c6 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/Shared.java +++ b/packages/DocumentsUI/src/com/android/documentsui/Shared.java @@ -22,7 +22,7 @@ import android.content.Context; * @hide */ public final class Shared { - public static final boolean DEBUG = false; + public static final boolean DEBUG = true; public static final String TAG = "Documents"; /** |