Loading packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java +4 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,9 @@ import com.android.documentsui.model.RootInfo; import com.google.common.collect.Maps; abstract class BaseActivity extends Activity { /** Intent action name to open copy destination. */ public static String ACTION_OPEN_COPY_DESTINATION_STRING = "com.android.documentsui.OPEN_COPY_DESTINATION"; public abstract State getDisplayState(); public abstract RootInfo getCurrentRoot(); Loading Loading @@ -90,6 +93,7 @@ abstract class BaseActivity extends Activity { 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; public static final int MODE_LIST = 1; Loading packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java +5 −1 Original line number Diff line number Diff line Loading @@ -682,7 +682,11 @@ public class DirectoryFragment extends Fragment { // Pop up a dialog to pick a destination. This is inadequate but works for now. // TODO: Implement a picker that is to spec. Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); final Intent intent = new Intent( BaseActivity.ACTION_OPEN_COPY_DESTINATION_STRING, Uri.EMPTY, getActivity(), DocumentsActivity.class); startActivityForResult(intent, REQUEST_COPY_DESTINATION); } Loading packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java +35 −13 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ 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_TREE; import static com.android.documentsui.BaseActivity.State.ACTION_OPEN_COPY_DESTINATION; import static com.android.documentsui.BaseActivity.State.MODE_GRID; import static com.android.documentsui.BaseActivity.State.MODE_LIST; import static com.android.documentsui.DirectoryFragment.ANIM_DOWN; Loading Loading @@ -190,7 +191,8 @@ public class DocumentsActivity extends BaseActivity { final String mimeType = getIntent().getType(); final String title = getIntent().getStringExtra(Intent.EXTRA_TITLE); SaveFragment.show(getFragmentManager(), mimeType, title); } else if (mState.action == ACTION_OPEN_TREE) { } else if (mState.action == ACTION_OPEN_TREE || mState.action == ACTION_OPEN_COPY_DESTINATION) { PickFragment.show(getFragmentManager()); } Loading @@ -199,8 +201,10 @@ public class DocumentsActivity extends BaseActivity { moreApps.setComponent(null); moreApps.setPackage(null); RootsFragment.show(getFragmentManager(), moreApps); } else if (mState.action == ACTION_OPEN || mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE) { } else if (mState.action == ACTION_OPEN || mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE || mState.action == ACTION_OPEN_COPY_DESTINATION) { RootsFragment.show(getFragmentManager(), null); } Loading Loading @@ -233,6 +237,8 @@ public class DocumentsActivity extends BaseActivity { mState.action = ACTION_MANAGE; } else if (DocumentsContract.ACTION_BROWSE_ROOT.equals(action)) { mState.action = ACTION_BROWSE; } else if (ACTION_OPEN_COPY_DESTINATION_STRING.equals(action)) { mState.action = ACTION_OPEN_COPY_DESTINATION; } if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT) { Loading Loading @@ -408,10 +414,12 @@ public class DocumentsActivity extends BaseActivity { public void updateActionBar() { if (mRootsToolbar != null) { if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT || mState.action == ACTION_OPEN_TREE) { if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT || mState.action == ACTION_OPEN_TREE) { mRootsToolbar.setTitle(R.string.title_open); } else if (mState.action == ACTION_CREATE) { } else if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_COPY_DESTINATION) { mRootsToolbar.setTitle(R.string.title_save); } } Loading Loading @@ -850,7 +858,9 @@ public class DocumentsActivity extends BaseActivity { if (cwd == null) { // No directory means recents if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE) { if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE || mState.action == ACTION_OPEN_COPY_DESTINATION) { RecentsCreateFragment.show(fm); } else { DirectoryFragment.showRecentsOpen(fm, anim); Loading Loading @@ -879,7 +889,8 @@ public class DocumentsActivity extends BaseActivity { } } if (mState.action == ACTION_OPEN_TREE) { if (mState.action == ACTION_OPEN_TREE || mState.action == ACTION_OPEN_COPY_DESTINATION) { final PickFragment pick = PickFragment.get(fm); if (pick != null) { final CharSequence displayName = (mState.stack.size() <= 1) ? root.title Loading Loading @@ -1062,9 +1073,17 @@ public class DocumentsActivity extends BaseActivity { @Override public void onPickRequested(DocumentInfo pickTarget) { final Uri viaUri = DocumentsContract.buildTreeDocumentUri(pickTarget.authority, pickTarget.documentId); new PickFinishTask(viaUri).executeOnExecutor(getCurrentExecutor()); Uri result; if (mState.action == ACTION_OPEN_TREE) { result = DocumentsContract.buildTreeDocumentUri( pickTarget.authority, pickTarget.documentId); } else if (mState.action == ACTION_OPEN_COPY_DESTINATION) { result = pickTarget.derivedUri; } else { // Should not be reached. throw new IllegalStateException("Invalid mState.action."); } new PickFinishTask(result).executeOnExecutor(getCurrentExecutor()); } private void saveStackBlocking() { Loading @@ -1072,7 +1091,9 @@ public class DocumentsActivity extends BaseActivity { final ContentValues values = new ContentValues(); final byte[] rawStack = DurableUtils.writeToArrayOrNull(mState.stack); if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE) { if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE || mState.action == ACTION_OPEN_COPY_DESTINATION) { // Remember stack for last create values.clear(); values.put(RecentColumns.KEY, mState.stack.buildKey()); Loading Loading @@ -1105,7 +1126,8 @@ public class DocumentsActivity extends BaseActivity { if (mState.action == ACTION_GET_CONTENT) { intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); } else if (mState.action == ACTION_OPEN_TREE) { } else if (mState.action == ACTION_OPEN_TREE || mState.action == ACTION_OPEN_COPY_DESTINATION) { intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION Loading packages/DocumentsUI/src/com/android/documentsui/RootsCache.java +4 −1 Original line number Diff line number Diff line Loading @@ -360,6 +360,7 @@ public class RootsCache { // Exclude read-only devices when creating if (state.action == State.ACTION_CREATE && !supportsCreate) continue; if (state.action == State.ACTION_OPEN_COPY_DESTINATION && !supportsCreate) continue; // Exclude roots that don't support directory picking if (state.action == State.ACTION_OPEN_TREE && !supportsIsChild) continue; // Exclude advanced devices when not requested Loading @@ -367,7 +368,9 @@ public class RootsCache { // Exclude non-local devices when local only if (state.localOnly && !localOnly) continue; // Only show empty roots when creating if (state.action != State.ACTION_CREATE && empty) continue; if ((state.action != State.ACTION_CREATE || state.action != State.ACTION_OPEN_TREE || state.action != State.ACTION_OPEN_COPY_DESTINATION) && empty) continue; // Only include roots that serve requested content final boolean overlap = Loading Loading
packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java +4 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,9 @@ import com.android.documentsui.model.RootInfo; import com.google.common.collect.Maps; abstract class BaseActivity extends Activity { /** Intent action name to open copy destination. */ public static String ACTION_OPEN_COPY_DESTINATION_STRING = "com.android.documentsui.OPEN_COPY_DESTINATION"; public abstract State getDisplayState(); public abstract RootInfo getCurrentRoot(); Loading Loading @@ -90,6 +93,7 @@ abstract class BaseActivity extends Activity { 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; public static final int MODE_LIST = 1; Loading
packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java +5 −1 Original line number Diff line number Diff line Loading @@ -682,7 +682,11 @@ public class DirectoryFragment extends Fragment { // Pop up a dialog to pick a destination. This is inadequate but works for now. // TODO: Implement a picker that is to spec. Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); final Intent intent = new Intent( BaseActivity.ACTION_OPEN_COPY_DESTINATION_STRING, Uri.EMPTY, getActivity(), DocumentsActivity.class); startActivityForResult(intent, REQUEST_COPY_DESTINATION); } Loading
packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java +35 −13 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ 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_TREE; import static com.android.documentsui.BaseActivity.State.ACTION_OPEN_COPY_DESTINATION; import static com.android.documentsui.BaseActivity.State.MODE_GRID; import static com.android.documentsui.BaseActivity.State.MODE_LIST; import static com.android.documentsui.DirectoryFragment.ANIM_DOWN; Loading Loading @@ -190,7 +191,8 @@ public class DocumentsActivity extends BaseActivity { final String mimeType = getIntent().getType(); final String title = getIntent().getStringExtra(Intent.EXTRA_TITLE); SaveFragment.show(getFragmentManager(), mimeType, title); } else if (mState.action == ACTION_OPEN_TREE) { } else if (mState.action == ACTION_OPEN_TREE || mState.action == ACTION_OPEN_COPY_DESTINATION) { PickFragment.show(getFragmentManager()); } Loading @@ -199,8 +201,10 @@ public class DocumentsActivity extends BaseActivity { moreApps.setComponent(null); moreApps.setPackage(null); RootsFragment.show(getFragmentManager(), moreApps); } else if (mState.action == ACTION_OPEN || mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE) { } else if (mState.action == ACTION_OPEN || mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE || mState.action == ACTION_OPEN_COPY_DESTINATION) { RootsFragment.show(getFragmentManager(), null); } Loading Loading @@ -233,6 +237,8 @@ public class DocumentsActivity extends BaseActivity { mState.action = ACTION_MANAGE; } else if (DocumentsContract.ACTION_BROWSE_ROOT.equals(action)) { mState.action = ACTION_BROWSE; } else if (ACTION_OPEN_COPY_DESTINATION_STRING.equals(action)) { mState.action = ACTION_OPEN_COPY_DESTINATION; } if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT) { Loading Loading @@ -408,10 +414,12 @@ public class DocumentsActivity extends BaseActivity { public void updateActionBar() { if (mRootsToolbar != null) { if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT || mState.action == ACTION_OPEN_TREE) { if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT || mState.action == ACTION_OPEN_TREE) { mRootsToolbar.setTitle(R.string.title_open); } else if (mState.action == ACTION_CREATE) { } else if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_COPY_DESTINATION) { mRootsToolbar.setTitle(R.string.title_save); } } Loading Loading @@ -850,7 +858,9 @@ public class DocumentsActivity extends BaseActivity { if (cwd == null) { // No directory means recents if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE) { if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE || mState.action == ACTION_OPEN_COPY_DESTINATION) { RecentsCreateFragment.show(fm); } else { DirectoryFragment.showRecentsOpen(fm, anim); Loading Loading @@ -879,7 +889,8 @@ public class DocumentsActivity extends BaseActivity { } } if (mState.action == ACTION_OPEN_TREE) { if (mState.action == ACTION_OPEN_TREE || mState.action == ACTION_OPEN_COPY_DESTINATION) { final PickFragment pick = PickFragment.get(fm); if (pick != null) { final CharSequence displayName = (mState.stack.size() <= 1) ? root.title Loading Loading @@ -1062,9 +1073,17 @@ public class DocumentsActivity extends BaseActivity { @Override public void onPickRequested(DocumentInfo pickTarget) { final Uri viaUri = DocumentsContract.buildTreeDocumentUri(pickTarget.authority, pickTarget.documentId); new PickFinishTask(viaUri).executeOnExecutor(getCurrentExecutor()); Uri result; if (mState.action == ACTION_OPEN_TREE) { result = DocumentsContract.buildTreeDocumentUri( pickTarget.authority, pickTarget.documentId); } else if (mState.action == ACTION_OPEN_COPY_DESTINATION) { result = pickTarget.derivedUri; } else { // Should not be reached. throw new IllegalStateException("Invalid mState.action."); } new PickFinishTask(result).executeOnExecutor(getCurrentExecutor()); } private void saveStackBlocking() { Loading @@ -1072,7 +1091,9 @@ public class DocumentsActivity extends BaseActivity { final ContentValues values = new ContentValues(); final byte[] rawStack = DurableUtils.writeToArrayOrNull(mState.stack); if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE) { if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE || mState.action == ACTION_OPEN_COPY_DESTINATION) { // Remember stack for last create values.clear(); values.put(RecentColumns.KEY, mState.stack.buildKey()); Loading Loading @@ -1105,7 +1126,8 @@ public class DocumentsActivity extends BaseActivity { if (mState.action == ACTION_GET_CONTENT) { intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); } else if (mState.action == ACTION_OPEN_TREE) { } else if (mState.action == ACTION_OPEN_TREE || mState.action == ACTION_OPEN_COPY_DESTINATION) { intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION Loading
packages/DocumentsUI/src/com/android/documentsui/RootsCache.java +4 −1 Original line number Diff line number Diff line Loading @@ -360,6 +360,7 @@ public class RootsCache { // Exclude read-only devices when creating if (state.action == State.ACTION_CREATE && !supportsCreate) continue; if (state.action == State.ACTION_OPEN_COPY_DESTINATION && !supportsCreate) continue; // Exclude roots that don't support directory picking if (state.action == State.ACTION_OPEN_TREE && !supportsIsChild) continue; // Exclude advanced devices when not requested Loading @@ -367,7 +368,9 @@ public class RootsCache { // Exclude non-local devices when local only if (state.localOnly && !localOnly) continue; // Only show empty roots when creating if (state.action != State.ACTION_CREATE && empty) continue; if ((state.action != State.ACTION_CREATE || state.action != State.ACTION_OPEN_TREE || state.action != State.ACTION_OPEN_COPY_DESTINATION) && empty) continue; // Only include roots that serve requested content final boolean overlap = Loading