summaryrefslogtreecommitdiffstats
path: root/samples/ApiDemos/src/com/example/android
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2015-03-16 18:05:58 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-03-16 18:05:59 +0000
commit3e8a010ab649282bc7d6090b5f38a6173dd2ddcd (patch)
tree5e356e1d6ddf812e9cdd3434c157fe3cc7cd42ac /samples/ApiDemos/src/com/example/android
parenta489ea0141fdaf146d244d4f7db1a8e260fa6879 (diff)
parentaa9e46deb6961dc5e0a355f03e8bdeb81956a5d0 (diff)
downloadandroid_development-3e8a010ab649282bc7d6090b5f38a6173dd2ddcd.tar.gz
android_development-3e8a010ab649282bc7d6090b5f38a6173dd2ddcd.tar.bz2
android_development-3e8a010ab649282bc7d6090b5f38a6173dd2ddcd.zip
Merge "Add API demo for sharing."
Diffstat (limited to 'samples/ApiDemos/src/com/example/android')
-rw-r--r--samples/ApiDemos/src/com/example/android/apis/content/FileProvider.java17
-rw-r--r--samples/ApiDemos/src/com/example/android/apis/content/ShareContent.java59
2 files changed, 70 insertions, 6 deletions
diff --git a/samples/ApiDemos/src/com/example/android/apis/content/FileProvider.java b/samples/ApiDemos/src/com/example/android/apis/content/FileProvider.java
index f26bcdaf4..63d891d09 100644
--- a/samples/ApiDemos/src/com/example/android/apis/content/FileProvider.java
+++ b/samples/ApiDemos/src/com/example/android/apis/content/FileProvider.java
@@ -111,14 +111,19 @@ public class FileProvider extends ContentProvider
}
@Override
- public AssetFileDescriptor openAssetFile(Uri uri, String mode) throws FileNotFoundException {
+ public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
// Try to open an asset with the given name.
try {
- InputStream is = getContext().getAssets().open(uri.getPath());
- // Start a new thread that pipes the stream data back to the caller.
- return new AssetFileDescriptor(
- openPipeHelper(uri, null, null, is, this), 0,
- AssetFileDescriptor.UNKNOWN_LENGTH);
+ String path = uri.getPath();
+ int off = path.indexOf('/', 1);
+ if (off < 0 || off >= (path.length()-1)) {
+ throw new FileNotFoundException("Unable to open " + uri);
+ }
+ int cookie = Integer.parseInt(path.substring(1, off));
+ String assetPath = path.substring(off+1);
+ AssetFileDescriptor asset = getContext().getAssets().openNonAssetFd(cookie, assetPath);
+ return new ParcelFileDescriptor(openPipeHelper(uri, null, null,
+ asset.createInputStream(), this));
} catch (IOException e) {
FileNotFoundException fnf = new FileNotFoundException("Unable to open " + uri);
throw fnf;
diff --git a/samples/ApiDemos/src/com/example/android/apis/content/ShareContent.java b/samples/ApiDemos/src/com/example/android/apis/content/ShareContent.java
new file mode 100644
index 000000000..247c7fc69
--- /dev/null
+++ b/samples/ApiDemos/src/com/example/android/apis/content/ShareContent.java
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2015, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.apis.content;
+
+import android.app.Activity;
+import android.content.ClipData;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.util.TypedValue;
+import android.view.View;
+import android.widget.Button;
+import com.example.android.apis.R;
+
+/**
+ * Example of sharing content from a private content provider.
+ */
+public class ShareContent extends Activity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.share_content);
+
+ // Watch for button clicks.
+ ((Button)findViewById(R.id.share_image)).setOnClickListener(new View.OnClickListener() {
+ @Override public void onClick(View v) {
+ Intent intent = new Intent(Intent.ACTION_SEND);
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ Uri.Builder b = new Uri.Builder();
+ b.scheme("content");
+ b.authority("com.example.android.apis.content.FileProvider");
+ TypedValue tv = new TypedValue();
+ getResources().getValue(R.drawable.jellies, tv, true);
+ b.appendEncodedPath(Integer.toString(tv.assetCookie));
+ b.appendEncodedPath(tv.string.toString());
+ Uri uri = b.build();
+ intent.setType("image/jpeg");
+ intent.putExtra(Intent.EXTRA_STREAM, uri);
+ intent.setClipData(ClipData.newUri(getContentResolver(), "image", uri));
+ startActivity(Intent.createChooser(intent, "Select share target"));
+ }
+ });
+ }
+}