DocumentsUI tablet support.
Shows as a faux dialog on larger tablets, since the normal dialog
themes from framework don't support action bars. Instead, this hacks
itself to look like a dialog with an InsetDrawable. Detects touches
in dim area to dismiss dialog.
Show all action bar icons on tablets, and roots panel is always
visible with a different shadow. Show settings in dialog. Allow mode
switches in recents.
Bug: 10329832
Change-Id: Id02982ce7b0d4694962d32f8d5286fdfcc207208
diff --git a/src/com/android/documentsui/DirectoryFragment.java b/src/com/android/documentsui/DirectoryFragment.java
index ba5a511..b2981db 100644
--- a/src/com/android/documentsui/DirectoryFragment.java
+++ b/src/com/android/documentsui/DirectoryFragment.java
@@ -228,7 +228,9 @@
// Push latest state up to UI
// TODO: if mode change was racing with us, don't overwrite it
- state.derivedMode = result.mode;
+ if (result.mode != MODE_UNKNOWN) {
+ state.derivedMode = result.mode;
+ }
state.derivedSortOrder = result.sortOrder;
((DocumentsActivity) context).onStateChanged();
@@ -254,8 +256,8 @@
}
@Override
- public void onStart() {
- super.onStart();
+ public void onResume() {
+ super.onResume();
updateDisplayState();
}
@@ -272,18 +274,20 @@
final RootInfo root = getArguments().getParcelable(EXTRA_ROOT);
final DocumentInfo doc = getArguments().getParcelable(EXTRA_DOC);
- final Uri stateUri = RecentsProvider.buildState(
- root.authority, root.rootId, doc.documentId);
- final ContentValues values = new ContentValues();
- values.put(StateColumns.MODE, state.userMode);
+ if (root != null) {
+ final Uri stateUri = RecentsProvider.buildState(
+ root.authority, root.rootId, doc.documentId);
+ final ContentValues values = new ContentValues();
+ values.put(StateColumns.MODE, state.userMode);
- new AsyncTask<Void, Void, Void>() {
- @Override
- protected Void doInBackground(Void... params) {
- resolver.insert(stateUri, values);
- return null;
- }
- }.execute();
+ new AsyncTask<Void, Void, Void>() {
+ @Override
+ protected Void doInBackground(Void... params) {
+ resolver.insert(stateUri, values);
+ return null;
+ }
+ }.execute();
+ }
// Mode change is just visual change; no need to kick loader, and
// deliver change event immediately.
@@ -733,23 +737,35 @@
icon1.setVisibility(View.VISIBLE);
icon1.setImageDrawable(iconDrawable);
- if (iconDrawable != null && roots.isIconUnique(root)) {
- // No summary needed if icon speaks for itself
- summary.setVisibility(View.INVISIBLE);
- } else {
- summary.setText(root.getDirectoryString());
- summary.setVisibility(View.VISIBLE);
- summary.setTextAlignment(TextView.TEXT_ALIGNMENT_TEXT_END);
- hasLine2 = true;
+ if (summary != null) {
+ final boolean alwaysShowSummary = getResources()
+ .getBoolean(R.bool.always_show_summary);
+ if (alwaysShowSummary) {
+ summary.setText(root.getDirectoryString());
+ summary.setVisibility(View.VISIBLE);
+ hasLine2 = true;
+ } else {
+ if (iconDrawable != null && roots.isIconUnique(root)) {
+ // No summary needed if icon speaks for itself
+ summary.setVisibility(View.INVISIBLE);
+ } else {
+ summary.setText(root.getDirectoryString());
+ summary.setVisibility(View.VISIBLE);
+ summary.setTextAlignment(TextView.TEXT_ALIGNMENT_TEXT_END);
+ hasLine2 = true;
+ }
+ }
}
} else {
icon1.setVisibility(View.GONE);
- if (docSummary != null) {
- summary.setText(docSummary);
- summary.setVisibility(View.VISIBLE);
- hasLine2 = true;
- } else {
- summary.setVisibility(View.INVISIBLE);
+ if (summary != null) {
+ if (docSummary != null) {
+ summary.setText(docSummary);
+ summary.setVisibility(View.VISIBLE);
+ hasLine2 = true;
+ } else {
+ summary.setVisibility(View.INVISIBLE);
+ }
}
}
@@ -772,7 +788,9 @@
size.setVisibility(View.GONE);
}
- line2.setVisibility(hasLine2 ? View.VISIBLE : View.GONE);
+ if (line2 != null) {
+ line2.setVisibility(hasLine2 ? View.VISIBLE : View.GONE);
+ }
final boolean enabled = Document.MIME_TYPE_DIR.equals(docMimeType)
|| MimePredicate.mimeMatches(state.acceptMimes, docMimeType);