Use an explicit intent for "Quick View"...
Define Intent.ACTION_QUICK_VIEW.
Change-Id: Iae85a2a6fe35cfd135ff1af6672d37cc6b33dce4
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index f786d2f..586f3cd 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -658,6 +658,15 @@
public static final String ACTION_DEFAULT = ACTION_VIEW;
/**
+ * Activity Action: Quick view the data.
+ * <p>Input: {@link #getData} is URI from which to retrieve data.
+ * <p>Output: nothing.
+ * @hide
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_QUICK_VIEW = "android.intent.action.QUICK_VIEW";
+
+ /**
* Used to indicate that some piece of data should be attached to some other
* place. For example, image data could be attached to a contact. It is up
* to the recipient to decide where the data should be attached; the intent
diff --git a/packages/DocumentsUI/src/com/android/documentsui/StandaloneActivity.java b/packages/DocumentsUI/src/com/android/documentsui/StandaloneActivity.java
index a972428..5f40dab 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/StandaloneActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/StandaloneActivity.java
@@ -20,10 +20,12 @@
import static com.android.documentsui.DirectoryFragment.ANIM_NONE;
import static com.android.documentsui.DirectoryFragment.ANIM_UP;
+import android.annotation.Nullable;
import android.app.Activity;
import android.app.FragmentManager;
import android.content.ActivityNotFoundException;
import android.content.ClipData;
+import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
@@ -57,6 +59,7 @@
* Standalone file management activity.
*/
public class StandaloneActivity extends BaseActivity {
+
public static final String TAG = "StandaloneFileManagement";
private Toolbar mToolbar;
@@ -283,23 +286,49 @@
@Override
public void onDocumentPicked(DocumentInfo doc) {
if (doc.isDirectory()) {
- mState.stack.push(doc);
- mState.stackTouched = true;
- onCurrentDirectoryChanged(ANIM_DOWN);
+ openFolder(doc);
} else {
- // Fall back 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 ex2) {
- Toast.makeText(this, R.string.toast_no_application, Toast.LENGTH_SHORT).show();
- }
+ openDocument(doc);
}
}
+ private void openFolder(DocumentInfo doc) {
+ mState.stack.push(doc);
+ mState.stackTouched = true;
+ onCurrentDirectoryChanged(ANIM_DOWN);
+ }
+
+ /**
+ * Launches an intent to view the specified document.
+ */
+ private void openDocument(DocumentInfo doc) {
+ Intent intent = getQuickViewIntent(doc);
+ if (intent == null) {
+ intent = new Intent(Intent.ACTION_VIEW);
+ intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ intent.setData(doc.derivedUri);
+ }
+
+ try {
+ startActivity(intent);
+ } catch (ActivityNotFoundException ex2) {
+ Toast.makeText(this, R.string.toast_no_application, Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ private @Nullable Intent getQuickViewIntent(DocumentInfo doc) {
+ Intent intent = new Intent(Intent.ACTION_QUICK_VIEW);
+ intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ intent.setData(doc.derivedUri);
+
+ ComponentName handler = intent.resolveActivity(getPackageManager());
+ if (handler != null) {
+ return intent;
+ }
+
+ return null;
+ }
+
@Override
public void onDocumentsPicked(List<DocumentInfo> docs) {
// TODO