Loading AndroidManifest.xml +0 −13 Original line number Diff line number Diff line Loading @@ -79,19 +79,6 @@ <action android:name="android.intent.action.VIEW_DOWNLOADS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="application/zip" android:host="com.android.providers.downloads.documents" android:scheme="content" /> <data android:mimeType="application/x-zip" android:host="com.android.providers.downloads.documents" android:scheme="content" /> <data android:mimeType="application/x-zip-compressed" android:host="com.android.providers.downloads.documents" android:scheme="content" /> </intent-filter> </activity> <activity Loading src/com/android/documentsui/AbstractActionHandler.java +69 −6 Original line number Diff line number Diff line Loading @@ -22,9 +22,12 @@ import android.content.Intent; import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Parcelable; import android.support.annotation.Nullable; import android.support.annotation.VisibleForTesting; import android.util.Log; import com.android.documentsui.AbstractActionHandler.CommonAddons; import com.android.documentsui.LoadDocStackTask.LoadDocStackCallback; import com.android.documentsui.base.BooleanConsumer; import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.DocumentStack; Loading @@ -36,7 +39,6 @@ import com.android.documentsui.dirlist.AnimationView; import com.android.documentsui.dirlist.AnimationView.AnimationType; import com.android.documentsui.dirlist.DocumentDetails; import com.android.documentsui.files.LauncherActivity; import com.android.documentsui.files.OpenUriForViewTask; import com.android.documentsui.roots.LoadRootTask; import com.android.documentsui.roots.RootsAccess; import com.android.documentsui.selection.Selection; Loading @@ -44,6 +46,7 @@ import com.android.documentsui.selection.SelectionManager; import com.android.documentsui.sidebar.EjectRootTask; import java.util.List; import java.util.Objects; import java.util.concurrent.Executor; /** Loading @@ -52,10 +55,13 @@ import java.util.concurrent.Executor; public abstract class AbstractActionHandler<T extends Activity & CommonAddons> implements ActionHandler { private static final String TAG = "AbstractActionHandler"; protected final T mActivity; protected final State mState; protected final RootsAccess mRoots; protected final DocumentsAccess mDocs; protected final ProviderAccess mProviders; protected final SelectionManager mSelectionMgr; protected final SearchViewManager mSearchMgr; protected final Lookup<String, Executor> mExecutors; Loading @@ -65,6 +71,7 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons> State state, RootsAccess roots, DocumentsAccess docs, ProviderAccess providers, SelectionManager selectionMgr, SearchViewManager searchMgr, Lookup<String, Executor> executors) { Loading @@ -72,13 +79,16 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons> assert(activity != null); assert(state != null); assert(roots != null); assert(providers != null); assert(selectionMgr != null); assert(searchMgr != null); assert(docs != null); mActivity = activity; mState = state; mRoots = roots; mDocs = docs; mProviders = providers; mSelectionMgr = selectionMgr; mSearchMgr = searchMgr; mExecutors = executors; Loading Loading @@ -158,6 +168,50 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons> @Override public void openContainerDocument(DocumentInfo doc) { assert(doc.isContainer()); if (mSearchMgr.isSearching()) { loadDocument( doc.derivedUri, (@Nullable DocumentStack stack) -> openFolderInSearchResult(stack, doc)); } else { openChildContainer(doc); } } private void openFolderInSearchResult(@Nullable DocumentStack stack, DocumentInfo doc) { if (stack == null) { mState.popDocumentsToRoot(); // Update navigator to give horizontal breadcrumb a chance to update documents. It // doesn't update its content if the size of document stack doesn't change. // TODO: update breadcrumb to take range update. mActivity.updateNavigator(); mState.pushDocument(doc); } else { if (!Objects.equals(mState.stack.root, stack.root)) { Log.w(TAG, "Provider returns " + stack.root + " rather than expected " + mState.stack.root); } mState.stack.clear(); // Update navigator to give horizontal breadcrumb a chance to update documents. It // doesn't update its content if the size of document stack doesn't change. // TODO: update breadcrumb to take range update. mActivity.updateNavigator(); mState.setStack(stack); } // Show an opening animation only if pressing "back" would get us back to the // previous directory. Especially after opening a root document, pressing // back, wouldn't go to the previous root, but close the activity. final int anim = (mState.hasLocationChanged() && mState.stack.size() > 1) ? AnimationView.ANIM_ENTER : AnimationView.ANIM_NONE; mActivity.refreshCurrentRootAndDirectory(anim); } private void openChildContainer(DocumentInfo doc) { DocumentInfo currentDoc = null; if (doc.isDirectory()) { Loading @@ -169,7 +223,8 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons> } assert(currentDoc != null); mActivity.notifyDirectoryNavigated(doc.derivedUri); mActivity.notifyDirectoryNavigated(currentDoc.derivedUri); mState.pushDocument(currentDoc); // Show an opening animation only if pressing "back" would get us back to the // previous directory. Especially after opening a root document, pressing Loading @@ -189,10 +244,15 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons> throw new UnsupportedOperationException("Share not supported!"); } @Override public final void loadDocument(Uri uri) { new OpenUriForViewTask<>(mActivity, mState, mRoots, mDocs, uri) .executeOnExecutor(mExecutors.lookup(uri.getAuthority())); protected final void loadDocument(Uri uri, LoadDocStackCallback callback) { new LoadDocStackTask( mActivity, uri, mRoots, mDocs, mProviders, callback ).executeOnExecutor(mExecutors.lookup(uri.getAuthority())); } @Override Loading Loading @@ -223,6 +283,9 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons> DocumentInfo getCurrentDirectory(); void setRootsDrawerOpen(boolean open); // TODO: Let navigator listens to State void updateNavigator(); @VisibleForTesting void notifyDirectoryNavigated(Uri docUri); } Loading src/com/android/documentsui/ActionHandler.java +0 −2 Original line number Diff line number Diff line Loading @@ -49,8 +49,6 @@ public interface ActionHandler { void loadRoot(Uri uri); void loadDocument(Uri uri); void openSelectedInNewWindow(); void openInNewWindow(DocumentStack path); Loading src/com/android/documentsui/BaseActivity.java +6 −0 Original line number Diff line number Diff line Loading @@ -415,6 +415,12 @@ public abstract class BaseActivity<T extends ActionHandler> && !root.isDownloads(); } // TODO: make navigator listen to state @Override public final void updateNavigator() { mNavigator.update(); } /** * Refreshes the content of the director and the menu/action bar. * The current directory name and selection will get updated. Loading src/com/android/documentsui/DirectoryLoader.java +3 −2 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.util.Log; import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.FilteringCursorWrapper; import com.android.documentsui.base.RootInfo; import com.android.documentsui.base.Shared; import com.android.documentsui.roots.RootCursorWrapper; import com.android.documentsui.sorting.SortModel; Loading Loading @@ -101,8 +102,8 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { cursor = new RootCursorWrapper(mUri.getAuthority(), mRoot.rootId, cursor, -1); if (mSearchMode) { // Filter directories out of search results, for now if (mSearchMode && !Shared.ENABLE_OMC_API_FEATURES) { // There is no findPath API. Enable filtering on folders in search mode. cursor = new FilteringCursorWrapper(cursor, null, SEARCH_REJECT_MIMES); } Loading Loading
AndroidManifest.xml +0 −13 Original line number Diff line number Diff line Loading @@ -79,19 +79,6 @@ <action android:name="android.intent.action.VIEW_DOWNLOADS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="application/zip" android:host="com.android.providers.downloads.documents" android:scheme="content" /> <data android:mimeType="application/x-zip" android:host="com.android.providers.downloads.documents" android:scheme="content" /> <data android:mimeType="application/x-zip-compressed" android:host="com.android.providers.downloads.documents" android:scheme="content" /> </intent-filter> </activity> <activity Loading
src/com/android/documentsui/AbstractActionHandler.java +69 −6 Original line number Diff line number Diff line Loading @@ -22,9 +22,12 @@ import android.content.Intent; import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Parcelable; import android.support.annotation.Nullable; import android.support.annotation.VisibleForTesting; import android.util.Log; import com.android.documentsui.AbstractActionHandler.CommonAddons; import com.android.documentsui.LoadDocStackTask.LoadDocStackCallback; import com.android.documentsui.base.BooleanConsumer; import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.DocumentStack; Loading @@ -36,7 +39,6 @@ import com.android.documentsui.dirlist.AnimationView; import com.android.documentsui.dirlist.AnimationView.AnimationType; import com.android.documentsui.dirlist.DocumentDetails; import com.android.documentsui.files.LauncherActivity; import com.android.documentsui.files.OpenUriForViewTask; import com.android.documentsui.roots.LoadRootTask; import com.android.documentsui.roots.RootsAccess; import com.android.documentsui.selection.Selection; Loading @@ -44,6 +46,7 @@ import com.android.documentsui.selection.SelectionManager; import com.android.documentsui.sidebar.EjectRootTask; import java.util.List; import java.util.Objects; import java.util.concurrent.Executor; /** Loading @@ -52,10 +55,13 @@ import java.util.concurrent.Executor; public abstract class AbstractActionHandler<T extends Activity & CommonAddons> implements ActionHandler { private static final String TAG = "AbstractActionHandler"; protected final T mActivity; protected final State mState; protected final RootsAccess mRoots; protected final DocumentsAccess mDocs; protected final ProviderAccess mProviders; protected final SelectionManager mSelectionMgr; protected final SearchViewManager mSearchMgr; protected final Lookup<String, Executor> mExecutors; Loading @@ -65,6 +71,7 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons> State state, RootsAccess roots, DocumentsAccess docs, ProviderAccess providers, SelectionManager selectionMgr, SearchViewManager searchMgr, Lookup<String, Executor> executors) { Loading @@ -72,13 +79,16 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons> assert(activity != null); assert(state != null); assert(roots != null); assert(providers != null); assert(selectionMgr != null); assert(searchMgr != null); assert(docs != null); mActivity = activity; mState = state; mRoots = roots; mDocs = docs; mProviders = providers; mSelectionMgr = selectionMgr; mSearchMgr = searchMgr; mExecutors = executors; Loading Loading @@ -158,6 +168,50 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons> @Override public void openContainerDocument(DocumentInfo doc) { assert(doc.isContainer()); if (mSearchMgr.isSearching()) { loadDocument( doc.derivedUri, (@Nullable DocumentStack stack) -> openFolderInSearchResult(stack, doc)); } else { openChildContainer(doc); } } private void openFolderInSearchResult(@Nullable DocumentStack stack, DocumentInfo doc) { if (stack == null) { mState.popDocumentsToRoot(); // Update navigator to give horizontal breadcrumb a chance to update documents. It // doesn't update its content if the size of document stack doesn't change. // TODO: update breadcrumb to take range update. mActivity.updateNavigator(); mState.pushDocument(doc); } else { if (!Objects.equals(mState.stack.root, stack.root)) { Log.w(TAG, "Provider returns " + stack.root + " rather than expected " + mState.stack.root); } mState.stack.clear(); // Update navigator to give horizontal breadcrumb a chance to update documents. It // doesn't update its content if the size of document stack doesn't change. // TODO: update breadcrumb to take range update. mActivity.updateNavigator(); mState.setStack(stack); } // Show an opening animation only if pressing "back" would get us back to the // previous directory. Especially after opening a root document, pressing // back, wouldn't go to the previous root, but close the activity. final int anim = (mState.hasLocationChanged() && mState.stack.size() > 1) ? AnimationView.ANIM_ENTER : AnimationView.ANIM_NONE; mActivity.refreshCurrentRootAndDirectory(anim); } private void openChildContainer(DocumentInfo doc) { DocumentInfo currentDoc = null; if (doc.isDirectory()) { Loading @@ -169,7 +223,8 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons> } assert(currentDoc != null); mActivity.notifyDirectoryNavigated(doc.derivedUri); mActivity.notifyDirectoryNavigated(currentDoc.derivedUri); mState.pushDocument(currentDoc); // Show an opening animation only if pressing "back" would get us back to the // previous directory. Especially after opening a root document, pressing Loading @@ -189,10 +244,15 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons> throw new UnsupportedOperationException("Share not supported!"); } @Override public final void loadDocument(Uri uri) { new OpenUriForViewTask<>(mActivity, mState, mRoots, mDocs, uri) .executeOnExecutor(mExecutors.lookup(uri.getAuthority())); protected final void loadDocument(Uri uri, LoadDocStackCallback callback) { new LoadDocStackTask( mActivity, uri, mRoots, mDocs, mProviders, callback ).executeOnExecutor(mExecutors.lookup(uri.getAuthority())); } @Override Loading Loading @@ -223,6 +283,9 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons> DocumentInfo getCurrentDirectory(); void setRootsDrawerOpen(boolean open); // TODO: Let navigator listens to State void updateNavigator(); @VisibleForTesting void notifyDirectoryNavigated(Uri docUri); } Loading
src/com/android/documentsui/ActionHandler.java +0 −2 Original line number Diff line number Diff line Loading @@ -49,8 +49,6 @@ public interface ActionHandler { void loadRoot(Uri uri); void loadDocument(Uri uri); void openSelectedInNewWindow(); void openInNewWindow(DocumentStack path); Loading
src/com/android/documentsui/BaseActivity.java +6 −0 Original line number Diff line number Diff line Loading @@ -415,6 +415,12 @@ public abstract class BaseActivity<T extends ActionHandler> && !root.isDownloads(); } // TODO: make navigator listen to state @Override public final void updateNavigator() { mNavigator.update(); } /** * Refreshes the content of the director and the menu/action bar. * The current directory name and selection will get updated. Loading
src/com/android/documentsui/DirectoryLoader.java +3 −2 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.util.Log; import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.FilteringCursorWrapper; import com.android.documentsui.base.RootInfo; import com.android.documentsui.base.Shared; import com.android.documentsui.roots.RootCursorWrapper; import com.android.documentsui.sorting.SortModel; Loading Loading @@ -101,8 +102,8 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { cursor = new RootCursorWrapper(mUri.getAuthority(), mRoot.rootId, cursor, -1); if (mSearchMode) { // Filter directories out of search results, for now if (mSearchMode && !Shared.ENABLE_OMC_API_FEATURES) { // There is no findPath API. Enable filtering on folders in search mode. cursor = new FilteringCursorWrapper(cursor, null, SEARCH_REJECT_MIMES); } Loading