Move Activity classes to own packages.

FilesActivity > manager/ManageActivity
DocumentsActivity > picker/PickActivity

Change-Id: If2efb07fbebbd6ef84aa744af17c8cbeac05d770
diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java
index 7ae2e51..2970eb1 100644
--- a/src/com/android/documentsui/BaseActivity.java
+++ b/src/com/android/documentsui/BaseActivity.java
@@ -104,14 +104,16 @@
 
     private static final String BENCHMARK_TESTING_PACKAGE = "com.android.documentsui.appperftests";
 
-    State mState;
-    @Nullable RetainedState mRetainedState;
-    RootsCache mRoots;
-    SearchViewManager mSearchManager;
-    DrawerController mDrawer;
-    NavigationViewManager mNavigator;
+    protected SearchViewManager mSearchManager;
+    // TODO: Unpublic this by injecting it into LoadLastAccessedStackTask
+    public State mState;
+
+    protected @Nullable RetainedState mRetainedState;
+    protected RootsCache mRoots;
+    protected DrawerController mDrawer;
+    protected NavigationViewManager mNavigator;
     List<EventListener> mEventListeners = new ArrayList<>();
-    SortController mSortController;
+    protected SortController mSortController;
 
     private final String mTag;
     private final ContentObserver mRootsCacheObserver = new ContentObserver(new Handler()) {
@@ -134,11 +136,11 @@
     public abstract MenuManager getMenuManager();
     public abstract DirectoryDetails getDirectoryDetails();
 
-    abstract void onTaskFinished(Uri... uris);
-    abstract void refreshDirectory(int anim);
+    protected abstract void onTaskFinished(Uri... uris);
+    protected abstract void refreshDirectory(int anim);
     /** Allows sub-classes to include information in a newly created State instance. */
-    abstract void includeState(State initialState);
-    abstract void onDirectoryCreated(DocumentInfo doc);
+    protected abstract void includeState(State initialState);
+    protected abstract void onDirectoryCreated(DocumentInfo doc);
 
     public BaseActivity(@LayoutRes int layoutId, String tag) {
         mLayoutId = layoutId;
@@ -321,11 +323,11 @@
         }
     }
 
-    final @Nullable DirectoryFragment getDirectoryFragment() {
+    protected final @Nullable DirectoryFragment getDirectoryFragment() {
         return DirectoryFragment.get(getFragmentManager());
     }
 
-    void showCreateDirectoryDialog() {
+    protected void showCreateDirectoryDialog() {
         Metrics.logUserAction(this, Metrics.USER_ACTION_CREATE_DIR);
 
         CreateDirectoryFragment.show(getFragmentManager());
@@ -335,7 +337,7 @@
      * Returns true if a directory can be created in the current location.
      * @return
      */
-    boolean canCreateDirectory() {
+    protected boolean canCreateDirectory() {
         final RootInfo root = getCurrentRoot();
         final DocumentInfo cwd = getCurrentDirectory();
         return cwd != null
@@ -345,7 +347,7 @@
                 && !root.isDownloads();
     }
 
-    void openContainerDocument(DocumentInfo doc) {
+    protected void openContainerDocument(DocumentInfo doc) {
         assert(doc.isContainer());
 
         notifyDirectoryNavigated(doc.derivedUri);
@@ -379,7 +381,7 @@
         invalidateOptionsMenu();
     }
 
-    final void loadRoot(final Uri uri) {
+    protected final void loadRoot(final Uri uri) {
         new LoadRootTask(this, uri).executeOnExecutor(
                 ProviderExecutor.forAuthority(uri.getAuthority()));
     }
@@ -417,7 +419,7 @@
         DirectoryFragment.reloadSearch(fm, root, cwd, query);
     }
 
-    final List<String> getExcludedAuthorities() {
+    private final List<String> getExcludedAuthorities() {
         List<String> authorities = new ArrayList<>();
         if (getIntent().getBooleanExtra(DocumentsContract.EXTRA_EXCLUDE_SELF, false)) {
             // Exclude roots provided by the calling package.
@@ -440,7 +442,7 @@
         return (root.flags & Root.FLAG_SUPPORTS_SEARCH) != 0;
     }
 
-    final String getCallingPackageMaybeExtra() {
+    public final String getCallingPackageMaybeExtra() {
         String callingPackage = getCallingPackage();
         // System apps can set the calling package name using an extra.
         try {
@@ -514,10 +516,7 @@
     }
 
     public void setPending(boolean pending) {
-        final SaveFragment save = SaveFragment.get(getFragmentManager());
-        if (save != null) {
-            save.setPending(pending);
-        }
+        // TODO: Isolate this behavior to PickActivity.
     }
 
     @Override
@@ -601,7 +600,7 @@
         super.onBackPressed();
     }
 
-    boolean onBeforePopDir() {
+    protected boolean onBeforePopDir() {
         // Files app overrides this with some fancy logic.
         return false;
     }
diff --git a/src/com/android/documentsui/CheckedTask.java b/src/com/android/documentsui/CheckedTask.java
index 747eb9c..242a279 100644
--- a/src/com/android/documentsui/CheckedTask.java
+++ b/src/com/android/documentsui/CheckedTask.java
@@ -41,13 +41,13 @@
     }
 
     /** Called prior to run being executed. Analogous to {@link AsyncTask#onPreExecute} */
-    void prepare() {}
+    protected void prepare() {}
 
     /** Analogous to {@link AsyncTask#doInBackground} */
-    abstract Output run(Input... input);
+    protected abstract Output run(Input... input);
 
     /** Analogous to {@link AsyncTask#onPostExecute} */
-    abstract void finish(Output output);
+    protected abstract void finish(Output output);
 
     @Override
     final protected void onPreExecute() {
diff --git a/src/com/android/documentsui/DocumentsMenuManager.java b/src/com/android/documentsui/DocumentsMenuManager.java
index e9d502e..035268e 100644
--- a/src/com/android/documentsui/DocumentsMenuManager.java
+++ b/src/com/android/documentsui/DocumentsMenuManager.java
@@ -25,7 +25,7 @@
 import android.view.Menu;
 import android.view.MenuItem;
 
-final class DocumentsMenuManager extends MenuManager {
+public final class DocumentsMenuManager extends MenuManager {
 
     private boolean mPicking;
 
diff --git a/src/com/android/documentsui/DrawerController.java b/src/com/android/documentsui/DrawerController.java
index 97d459b..eca3f0a 100644
--- a/src/com/android/documentsui/DrawerController.java
+++ b/src/com/android/documentsui/DrawerController.java
@@ -36,7 +36,7 @@
  *
  * @see DrawerController#create(DrawerLayout)
  */
-abstract class DrawerController implements DrawerListener {
+public abstract class DrawerController implements DrawerListener {
     public static final String TAG = "DrawerController";
 
     // Drawer opening triggered by tapping the navigation icon
@@ -54,11 +54,12 @@
     @Retention(RetentionPolicy.SOURCE)
     public @interface Trigger {}
 
+    public abstract void update();
     /**
      * Toggles the drawer and sets the OPENED_OTHER as the action that causes opening the drawer.
      * @param open
      */
-    abstract void setOpen(boolean open);
+    public abstract void setOpen(boolean open);
 
     /**
      * Toggles the drawer.
@@ -66,10 +67,9 @@
      * @param trigger Indicates what action caused opening the drawer. It is ignored for closing.
      */
     abstract void setOpen(boolean open, @Trigger int trigger);
-    abstract boolean isPresent();
-    abstract boolean isOpen();
+    public abstract boolean isPresent();
+    public abstract boolean isOpen();
     abstract void setTitle(String title);
-    abstract void update();
 
     /**
      * Returns a controller suitable for {@code Layout}.
@@ -166,7 +166,7 @@
         }
 
         @Override
-        void setOpen(boolean open) {
+        public void setOpen(boolean open) {
             setOpen(open, OPENED_OTHER);
         }
 
@@ -181,12 +181,12 @@
         }
 
         @Override
-        boolean isOpen() {
+        public boolean isOpen() {
             return mLayout.isDrawerOpen(mDrawer);
         }
 
         @Override
-        boolean isPresent() {
+        public boolean isPresent() {
             return true;
         }
 
@@ -196,7 +196,7 @@
         }
 
         @Override
-        void update() {
+        public void update() {
             mToggle.syncState();
         }
 
@@ -232,18 +232,18 @@
     private static final class DummyDrawerController extends DrawerController {
 
         @Override
-        void setOpen(boolean open) {}
+        public void setOpen(boolean open) {}
 
         @Override
-        void setOpen(boolean open, @Trigger int trigger) {}
+        public void setOpen(boolean open, @Trigger int trigger) {}
 
         @Override
-        boolean isOpen() {
+        public boolean isOpen() {
             return false;
         }
 
         @Override
-        boolean isPresent() {
+        public boolean isPresent() {
             return false;
         }
 
@@ -251,7 +251,7 @@
         void setTitle(String title) {}
 
         @Override
-        void update() {}
+        public void update() {}
 
         @Override
         public void onDrawerSlide(View drawerView, float slideOffset) {}
diff --git a/src/com/android/documentsui/FilesMenuManager.java b/src/com/android/documentsui/FilesMenuManager.java
index f5ccbd5..94ea4f9 100644
--- a/src/com/android/documentsui/FilesMenuManager.java
+++ b/src/com/android/documentsui/FilesMenuManager.java
@@ -21,7 +21,7 @@
 
 import com.android.documentsui.model.RootInfo;
 
-final class FilesMenuManager extends MenuManager {
+public final class FilesMenuManager extends MenuManager {
 
     public FilesMenuManager(SearchViewManager searchManager, State displayState) {
         super(searchManager, displayState);
diff --git a/src/com/android/documentsui/Metrics.java b/src/com/android/documentsui/Metrics.java
index 3c45a93..22d7f34 100644
--- a/src/com/android/documentsui/Metrics.java
+++ b/src/com/android/documentsui/Metrics.java
@@ -31,6 +31,7 @@
 import android.util.Log;
 
 import com.android.documentsui.State.ActionType;
+import com.android.documentsui.manager.LauncherActivity;
 import com.android.documentsui.model.DocumentInfo;
 import com.android.documentsui.model.RootInfo;
 import com.android.documentsui.services.FileOperationService;
diff --git a/src/com/android/documentsui/NavigationViewManager.java b/src/com/android/documentsui/NavigationViewManager.java
index 8c0972b..1479ed4 100644
--- a/src/com/android/documentsui/NavigationViewManager.java
+++ b/src/com/android/documentsui/NavigationViewManager.java
@@ -81,7 +81,7 @@
         }
     }
 
-    void update() {
+    public void update() {
 
         // TODO: Looks to me like this block is never getting hit.
         if (mEnv.isSearchExpanded()) {
diff --git a/src/com/android/documentsui/PairedTask.java b/src/com/android/documentsui/PairedTask.java
index 7d2da0b..fe0e0f8 100644
--- a/src/com/android/documentsui/PairedTask.java
+++ b/src/com/android/documentsui/PairedTask.java
@@ -17,7 +17,6 @@
 package com.android.documentsui;
 
 import android.app.Activity;
-import android.os.AsyncTask;
 
 /**
  * An {@link CheckedTask} that guards work with checks that a paired {@link Activity}
@@ -27,7 +26,7 @@
  * @template Input input type
  * @template Output output type
  */
-abstract class PairedTask<Owner extends Activity, Input, Output>
+public abstract class PairedTask<Owner extends Activity, Input, Output>
         extends CheckedTask<Input, Output> {
 
     protected final Owner mOwner;
diff --git a/src/com/android/documentsui/PickFragment.java b/src/com/android/documentsui/PickFragment.java
index 933506c..e7ce944 100644
--- a/src/com/android/documentsui/PickFragment.java
+++ b/src/com/android/documentsui/PickFragment.java
@@ -31,6 +31,7 @@
 import android.widget.Button;
 
 import com.android.documentsui.model.DocumentInfo;
+import com.android.documentsui.picker.PickActivity;
 import com.android.documentsui.services.FileOperationService.OpType;
 
 /**
@@ -81,7 +82,7 @@
     private View.OnClickListener mPickListener = new View.OnClickListener() {
         @Override
         public void onClick(View v) {
-            final DocumentsActivity activity = DocumentsActivity.get(PickFragment.this);
+            final PickActivity activity = PickActivity.get(PickFragment.this);
             activity.onPickRequested(mPickTarget);
         }
     };
diff --git a/src/com/android/documentsui/RootsFragment.java b/src/com/android/documentsui/RootsFragment.java
index 335ae4c..e4d44f2 100644
--- a/src/com/android/documentsui/RootsFragment.java
+++ b/src/com/android/documentsui/RootsFragment.java
@@ -63,6 +63,7 @@
 import com.android.documentsui.clipping.DocumentClipper;
 import com.android.documentsui.model.DocumentInfo;
 import com.android.documentsui.model.RootInfo;
+import com.android.documentsui.picker.PickActivity;
 import com.android.documentsui.services.FileOperations;
 
 import java.util.ArrayList;
@@ -549,7 +550,7 @@
 
         @Override
         void open(RootsFragment fragment) {
-            DocumentsActivity activity = DocumentsActivity.get(fragment);
+            PickActivity activity = PickActivity.get(fragment);
             Metrics.logAppVisited(fragment.getActivity(), info);
             activity.onAppPicked(info);
         }
diff --git a/src/com/android/documentsui/SearchViewManager.java b/src/com/android/documentsui/SearchViewManager.java
index de2d155..63c07dd 100644
--- a/src/com/android/documentsui/SearchViewManager.java
+++ b/src/com/android/documentsui/SearchViewManager.java
@@ -295,12 +295,11 @@
         return mCurrentSearch;
     }
 
-    boolean isSearching() {
+    public boolean isSearching() {
         return mCurrentSearch != null;
     }
 
     boolean isExpanded() {
         return mSearchExpanded;
     }
-
 }
diff --git a/src/com/android/documentsui/dirlist/DirectoryFragment.java b/src/com/android/documentsui/dirlist/DirectoryFragment.java
index fe07958..29b605d 100644
--- a/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ b/src/com/android/documentsui/dirlist/DirectoryFragment.java
@@ -67,7 +67,6 @@
 import com.android.documentsui.BaseActivity;
 import com.android.documentsui.DirectoryLoader;
 import com.android.documentsui.DirectoryResult;
-import com.android.documentsui.DocumentsActivity;
 import com.android.documentsui.DocumentsApplication;
 import com.android.documentsui.Events.InputEvent;
 import com.android.documentsui.Events.MotionInputEvent;
@@ -89,6 +88,7 @@
 import com.android.documentsui.dirlist.MultiSelectManager.Selection;
 import com.android.documentsui.model.DocumentInfo;
 import com.android.documentsui.model.RootInfo;
+import com.android.documentsui.picker.PickActivity;
 import com.android.documentsui.services.FileOperation;
 import com.android.documentsui.services.FileOperationService;
 import com.android.documentsui.services.FileOperationService.OpType;
@@ -862,7 +862,7 @@
                 Shared.ACTION_PICK_COPY_DESTINATION,
                 Uri.EMPTY,
                 getActivity(),
-                DocumentsActivity.class);
+                PickActivity.class);
 
         UrisSupplier srcs;
         try {
diff --git a/src/com/android/documentsui/LauncherActivity.java b/src/com/android/documentsui/manager/LauncherActivity.java
similarity index 95%
rename from src/com/android/documentsui/LauncherActivity.java
rename to src/com/android/documentsui/manager/LauncherActivity.java
index 5d7e8cd..165bb14 100644
--- a/src/com/android/documentsui/LauncherActivity.java
+++ b/src/com/android/documentsui/manager/LauncherActivity.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.documentsui;
+package com.android.documentsui.manager;
 
 import static com.android.documentsui.Shared.DEBUG;
 
@@ -29,6 +29,8 @@
 import android.support.annotation.Nullable;
 import android.util.Log;
 
+import com.android.documentsui.Shared;
+
 import java.util.List;
 
 /**
@@ -97,7 +99,7 @@
     }
 
     static final Intent createLaunchIntent(Activity activity) {
-        Intent intent = new Intent(activity, FilesActivity.class);
+        Intent intent = new Intent(activity, ManageActivity.class);
         intent.setData(buildLaunchUri());
 
         // Relay any config overrides bits present in the original intent.
@@ -128,7 +130,7 @@
                 .build();
     }
 
-    static boolean isLaunchUri(@Nullable Uri uri) {
+    public static boolean isLaunchUri(@Nullable Uri uri) {
         boolean result = uri != null && LAUNCH_CONTROL_AUTHORITY.equals(uri.getAuthority());
         return result;
     }
diff --git a/src/com/android/documentsui/FilesActivity.java b/src/com/android/documentsui/manager/ManageActivity.java
similarity index 94%
rename from src/com/android/documentsui/FilesActivity.java
rename to src/com/android/documentsui/manager/ManageActivity.java
index 1d60387..2cde713 100644
--- a/src/com/android/documentsui/FilesActivity.java
+++ b/src/com/android/documentsui/manager/ManageActivity.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.documentsui;
+package com.android.documentsui.manager;
 
 import static com.android.documentsui.OperationDialogFragment.DIALOG_TYPE_UNKNOWN;
 import static com.android.documentsui.Shared.DEBUG;
@@ -34,8 +34,22 @@
 import android.view.Menu;
 import android.view.MenuItem;
 
+import com.android.documentsui.BaseActivity;
+import com.android.documentsui.DocumentsApplication;
+import com.android.documentsui.FilesMenuManager;
+import com.android.documentsui.MenuManager;
 import com.android.documentsui.MenuManager.DirectoryDetails;
+import com.android.documentsui.Metrics;
+import com.android.documentsui.OperationDialogFragment;
 import com.android.documentsui.OperationDialogFragment.DialogType;
+import com.android.documentsui.PairedTask;
+import com.android.documentsui.ProviderExecutor;
+import com.android.documentsui.R;
+import com.android.documentsui.RootsCache;
+import com.android.documentsui.RootsFragment;
+import com.android.documentsui.Shared;
+import com.android.documentsui.Snackbars;
+import com.android.documentsui.State;
 import com.android.documentsui.clipping.DocumentClipper;
 import com.android.documentsui.dirlist.AnimationView;
 import com.android.documentsui.dirlist.DirectoryFragment;
@@ -56,7 +70,7 @@
 /**
  * Standalone file management activity.
  */
-public class FilesActivity extends BaseActivity {
+public class ManageActivity extends BaseActivity {
 
     public static final String TAG = "FilesActivity";
 
@@ -70,7 +84,7 @@
     private FilesMenuManager mMenuManager;
     private DirectoryDetails mDetails;
 
-    public FilesActivity() {
+    public ManageActivity() {
         super(R.layout.files_activity, TAG);
     }
 
@@ -150,7 +164,7 @@
     }
 
     @Override
-    void includeState(State state) {
+    public void includeState(State state) {
         final Intent intent = getIntent();
 
         state.action = State.ACTION_BROWSE;
@@ -261,7 +275,7 @@
     }
 
     @Override
-    void refreshDirectory(int anim) {
+    public void refreshDirectory(int anim) {
         final FragmentManager fm = getFragmentManager();
         final RootInfo root = getCurrentRoot();
         final DocumentInfo cwd = getCurrentDirectory();
@@ -320,7 +334,7 @@
     }
 
     @Override
-    void onDirectoryCreated(DocumentInfo doc) {
+    public void onDirectoryCreated(DocumentInfo doc) {
         assert(doc.isDirectory());
         getDirectoryFragment().getFocusManager().onDirectoryCreated(doc.documentId);
     }
@@ -416,7 +430,7 @@
     // do it if user already hit back recently and we recently
     // did some fiddling.
     @Override
-    boolean onBeforePopDir() {
+    protected boolean onBeforePopDir() {
         int size = mState.stack.size();
 
         if (mDrawer.isPresent()
@@ -446,7 +460,7 @@
     }
 
     @Override
-    void onTaskFinished(Uri... uris) {
+    public void onTaskFinished(Uri... uris) {
         if (DEBUG) Log.d(TAG, "onFinished() " + Arrays.toString(uris));
 
         final Intent intent = new Intent();
@@ -489,10 +503,10 @@
      * to know which root to select. Also, the stack doesn't contain intermediate directories.
      * It's primarly used for opening ZIP archives from Downloads app.
      */
-    private static final class OpenUriForViewTask extends PairedTask<FilesActivity, Uri, Void> {
+    private static final class OpenUriForViewTask extends PairedTask<ManageActivity, Uri, Void> {
 
         private final State mState;
-        public OpenUriForViewTask(FilesActivity activity) {
+        public OpenUriForViewTask(ManageActivity activity) {
             super(activity);
             mState = activity.mState;
         }
diff --git a/src/com/android/documentsui/QuickViewIntentBuilder.java b/src/com/android/documentsui/manager/QuickViewIntentBuilder.java
similarity index 98%
rename from src/com/android/documentsui/QuickViewIntentBuilder.java
rename to src/com/android/documentsui/manager/QuickViewIntentBuilder.java
index b8d2247..a74e709 100644
--- a/src/com/android/documentsui/QuickViewIntentBuilder.java
+++ b/src/com/android/documentsui/manager/QuickViewIntentBuilder.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.documentsui;
+package com.android.documentsui.manager;
 
 import static com.android.documentsui.Shared.DEBUG;
 import static com.android.documentsui.Shared.MAX_DOCS_IN_INTENT;
@@ -35,6 +35,8 @@
 import android.util.Log;
 import android.util.Range;
 
+import com.android.documentsui.R;
+import com.android.documentsui.RootCursorWrapper;
 import com.android.documentsui.dirlist.Model;
 import com.android.documentsui.model.DocumentInfo;
 
diff --git a/src/com/android/documentsui/LoadLastAccessedStackTask.java b/src/com/android/documentsui/picker/LoadLastAccessedStackTask.java
similarity index 89%
rename from src/com/android/documentsui/LoadLastAccessedStackTask.java
rename to src/com/android/documentsui/picker/LoadLastAccessedStackTask.java
index 78e79c7..0d2ea31 100644
--- a/src/com/android/documentsui/LoadLastAccessedStackTask.java
+++ b/src/com/android/documentsui/picker/LoadLastAccessedStackTask.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.documentsui;
+package com.android.documentsui.picker;
 
 import static com.android.documentsui.Shared.DEBUG;
 
@@ -22,7 +22,12 @@
 import android.net.Uri;
 import android.util.Log;
 
+import com.android.documentsui.DocumentsApplication;
+import com.android.documentsui.LastAccessedProvider;
 import com.android.documentsui.LastAccessedProvider.Columns;
+import com.android.documentsui.PairedTask;
+import com.android.documentsui.RootsCache;
+import com.android.documentsui.State;
 import com.android.documentsui.dirlist.AnimationView;
 import com.android.documentsui.model.DurableUtils;
 import com.android.documentsui.model.RootInfo;
@@ -40,14 +45,14 @@
  * for an app like DropBox.
  */
 final class LoadLastAccessedStackTask
-        extends PairedTask<DocumentsActivity, Void, Void> {
+        extends PairedTask<PickActivity, Void, Void> {
 
     private static final String TAG = "LoadLastAccessedStackTask";
     private volatile boolean mRestoredStack;
     private volatile boolean mExternal;
     private State mState;
 
-    public LoadLastAccessedStackTask(DocumentsActivity activity) {
+    public LoadLastAccessedStackTask(PickActivity activity) {
         super(activity);
         mState = activity.mState;
     }
diff --git a/src/com/android/documentsui/DocumentsActivity.java b/src/com/android/documentsui/picker/PickActivity.java
similarity index 91%
rename from src/com/android/documentsui/DocumentsActivity.java
rename to src/com/android/documentsui/picker/PickActivity.java
index 555fbde..810920d 100644
--- a/src/com/android/documentsui/DocumentsActivity.java
+++ b/src/com/android/documentsui/picker/PickActivity.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.documentsui;
+package com.android.documentsui.picker;
 
 import static com.android.documentsui.Shared.DEBUG;
 import static com.android.documentsui.State.ACTION_CREATE;
@@ -41,8 +41,21 @@
 import android.util.Log;
 import android.view.Menu;
 
-import com.android.documentsui.MenuManager.DirectoryDetails;
+import com.android.documentsui.BaseActivity;
+import com.android.documentsui.DocumentsApplication;
+import com.android.documentsui.DocumentsMenuManager;
+import com.android.documentsui.LastAccessedProvider;
 import com.android.documentsui.LastAccessedProvider.Columns;
+import com.android.documentsui.MenuManager;
+import com.android.documentsui.MenuManager.DirectoryDetails;
+import com.android.documentsui.MimePredicate;
+import com.android.documentsui.PairedTask;
+import com.android.documentsui.PickFragment;
+import com.android.documentsui.R;
+import com.android.documentsui.RootsFragment;
+import com.android.documentsui.Shared;
+import com.android.documentsui.Snackbars;
+import com.android.documentsui.State;
 import com.android.documentsui.dirlist.DirectoryFragment;
 import com.android.documentsui.dirlist.FragmentTuner;
 import com.android.documentsui.dirlist.FragmentTuner.DocumentsTuner;
@@ -54,13 +67,13 @@
 import java.util.Arrays;
 import java.util.List;
 
-public class DocumentsActivity extends BaseActivity {
+public class PickActivity extends BaseActivity {
     private static final int CODE_FORWARD = 42;
     private static final String TAG = "DocumentsActivity";
     private DocumentsMenuManager mMenuManager;
     private DirectoryDetails mDetails;
 
-    public DocumentsActivity() {
+    public PickActivity() {
         super(R.layout.documents_activity, TAG);
     }
 
@@ -114,7 +127,7 @@
     }
 
     @Override
-    void includeState(State state) {
+    protected void includeState(State state) {
         final Intent intent = getIntent();
         final String action = intent.getAction();
         if (Intent.ACTION_OPEN_DOCUMENT.equals(action)) {
@@ -224,7 +237,7 @@
     }
 
     @Override
-    void refreshDirectory(int anim) {
+    protected void refreshDirectory(int anim) {
         final FragmentManager fm = getFragmentManager();
         final RootInfo root = getCurrentRoot();
         final DocumentInfo cwd = getCurrentDirectory();
@@ -273,7 +286,15 @@
     }
 
     @Override
-    void onDirectoryCreated(DocumentInfo doc) {
+    public void setPending(boolean pending) {
+        final SaveFragment save = SaveFragment.get(getFragmentManager());
+        if (save != null) {
+            save.setPending(pending);
+        }
+    }
+
+    @Override
+    protected void onDirectoryCreated(DocumentInfo doc) {
         assert(doc.isDirectory());
         openContainerDocument(doc);
     }
@@ -331,7 +352,7 @@
     }
 
     @Override
-    void onTaskFinished(Uri... uris) {
+    protected void onTaskFinished(Uri... uris) {
         if (DEBUG) Log.d(TAG, "onFinished() " + Arrays.toString(uris));
 
         final Intent intent = new Intent();
@@ -369,8 +390,8 @@
     }
 
 
-    public static DocumentsActivity get(Fragment fragment) {
-        return (DocumentsActivity) fragment.getActivity();
+    public static PickActivity get(Fragment fragment) {
+        return (PickActivity) fragment.getActivity();
     }
 
     @Override
@@ -390,10 +411,10 @@
         return mDetails;
     }
 
-    private static final class PickFinishTask extends PairedTask<DocumentsActivity, Void, Void> {
+    private static final class PickFinishTask extends PairedTask<PickActivity, Void, Void> {
         private final Uri mUri;
 
-        public PickFinishTask(DocumentsActivity activity, Uri uri) {
+        public PickFinishTask(PickActivity activity, Uri uri) {
             super(activity);
             mUri = uri;
         }
@@ -410,10 +431,10 @@
         }
     }
 
-    private static final class ExistingFinishTask extends PairedTask<DocumentsActivity, Void, Void> {
+    private static final class ExistingFinishTask extends PairedTask<PickActivity, Void, Void> {
         private final Uri[] mUris;
 
-        public ExistingFinishTask(DocumentsActivity activity, Uri... uris) {
+        public ExistingFinishTask(PickActivity activity, Uri... uris) {
             super(activity);
             mUris = uris;
         }
@@ -433,11 +454,11 @@
     /**
      * Task that creates a new document in the background.
      */
-    private static final class CreateFinishTask extends PairedTask<DocumentsActivity, Void, Uri> {
+    private static final class CreateFinishTask extends PairedTask<PickActivity, Void, Uri> {
         private final String mMimeType;
         private final String mDisplayName;
 
-        public CreateFinishTask(DocumentsActivity activity, String mimeType, String displayName) {
+        public CreateFinishTask(PickActivity activity, String mimeType, String displayName) {
             super(activity);
             mMimeType = mimeType;
             mDisplayName = displayName;
diff --git a/src/com/android/documentsui/SaveFragment.java b/src/com/android/documentsui/picker/SaveFragment.java
similarity index 95%
rename from src/com/android/documentsui/SaveFragment.java
rename to src/com/android/documentsui/picker/SaveFragment.java
index a37590d..a8f2f88 100644
--- a/src/com/android/documentsui/SaveFragment.java
+++ b/src/com/android/documentsui/picker/SaveFragment.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.documentsui;
+package com.android.documentsui.picker;
 
 import android.app.Fragment;
 import android.app.FragmentManager;
@@ -33,12 +33,14 @@
 import android.widget.ImageView;
 import android.widget.ProgressBar;
 
+import com.android.documentsui.IconUtils;
+import com.android.documentsui.R;
 import com.android.documentsui.model.DocumentInfo;
 
 /**
  * Display document title editor and save button.
  */
-public class SaveFragment extends Fragment {
+class SaveFragment extends Fragment {
     public static final String TAG = "SaveFragment";
 
     private DocumentInfo mReplaceTarget;
@@ -50,7 +52,7 @@
     private static final String EXTRA_MIME_TYPE = "mime_type";
     private static final String EXTRA_DISPLAY_NAME = "display_name";
 
-    public static void show(FragmentManager fm, String mimeType, String displayName) {
+    static void show(FragmentManager fm, String mimeType, String displayName) {
         final Bundle args = new Bundle();
         args.putString(EXTRA_MIME_TYPE, mimeType);
         args.putString(EXTRA_DISPLAY_NAME, displayName);
@@ -147,7 +149,7 @@
     };
 
     private void performSave() {
-        final DocumentsActivity activity = DocumentsActivity.get(SaveFragment.this);
+        final PickActivity activity = PickActivity.get(SaveFragment.this);
         if (mReplaceTarget != null) {
             activity.onSaveRequested(mReplaceTarget);
         } else {
diff --git a/src/com/android/documentsui/services/Job.java b/src/com/android/documentsui/services/Job.java
index 14ae66e..24a95c6 100644
--- a/src/com/android/documentsui/services/Job.java
+++ b/src/com/android/documentsui/services/Job.java
@@ -41,7 +41,7 @@
 import android.util.Log;
 
 import com.android.documentsui.clipping.UrisSupplier;
-import com.android.documentsui.FilesActivity;
+import com.android.documentsui.manager.ManageActivity;
 import com.android.documentsui.Metrics;
 import com.android.documentsui.OperationDialogFragment;
 import com.android.documentsui.R;
@@ -298,7 +298,7 @@
      * Creates an intent for navigating back to the destination directory.
      */
     Intent buildNavigateIntent(String tag) {
-        Intent intent = new Intent(service, FilesActivity.class);
+        Intent intent = new Intent(service, ManageActivity.class);
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         intent.setAction(DocumentsContract.ACTION_BROWSE);
         intent.setData(getDataUriForIntent(tag));