summaryrefslogtreecommitdiffstats
path: root/samples
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@google.com>2013-05-13 11:44:39 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-05-13 11:44:39 -0700
commitfae6eb7aa41b4bfb59d95e5f01c1e025c137f871 (patch)
treebdd2ebaa0e4953c76e456669292748909adfadb5 /samples
parentacbf6e2ef6899d4c62318a37e18156ba4cbc5609 (diff)
parent5f1aa33aa321f61ba9b5cffbef6d80ae79c55455 (diff)
downloadandroid_development-fae6eb7aa41b4bfb59d95e5f01c1e025c137f871.tar.gz
android_development-fae6eb7aa41b4bfb59d95e5f01c1e025c137f871.tar.bz2
android_development-fae6eb7aa41b4bfb59d95e5f01c1e025c137f871.zip
am 5f1aa33a: am 44bafdcc: Merge "DO NOT MERGE. Example code for FileProvider." into jb-mr1.1-ub-dev
* commit '5f1aa33aa321f61ba9b5cffbef6d80ae79c55455': DO NOT MERGE. Example code for FileProvider.
Diffstat (limited to 'samples')
-rw-r--r--samples/Support4Demos/AndroidManifest.xml22
-rw-r--r--samples/Support4Demos/res/layout/file_provider_example.xml29
-rw-r--r--samples/Support4Demos/res/values/strings.xml1
-rw-r--r--samples/Support4Demos/res/xml/my_paths.xml14
-rw-r--r--samples/Support4Demos/src/com/example/android/supportv4/content/FileProviderExample.java81
5 files changed, 147 insertions, 0 deletions
diff --git a/samples/Support4Demos/AndroidManifest.xml b/samples/Support4Demos/AndroidManifest.xml
index 5537785c9..3a0d54511 100644
--- a/samples/Support4Demos/AndroidManifest.xml
+++ b/samples/Support4Demos/AndroidManifest.xml
@@ -295,5 +295,27 @@
<provider android:authorities="com.example.supportv4.content.sharingsupportprovider"
android:name=".content.SharingSupportProvider" />
+ <!-- FileProvider Example -->
+
+ <activity android:name=".content.FileProviderExample"
+ android:label="@string/file_provider_example">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="com.example.android.supportv4.SUPPORT4_SAMPLE_CODE" />
+ </intent-filter>
+ </activity>
+
+<!-- BEGIN_INCLUDE(file_provider_declaration) -->
+ <provider
+ android:name="android.support.v4.content.FileProvider"
+ android:authorities="com.example.android.supportv4.my_files"
+ android:grantUriPermissions="true"
+ android:exported="false">
+ <meta-data
+ android:name="android.support.FILE_PROVIDER_PATHS"
+ android:resource="@xml/my_paths" />
+ </provider>
+<!-- END_INCLUDE(file_provider_declaration) -->
+
</application>
</manifest>
diff --git a/samples/Support4Demos/res/layout/file_provider_example.xml b/samples/Support4Demos/res/layout/file_provider_example.xml
new file mode 100644
index 000000000..2e53c3b83
--- /dev/null
+++ b/samples/Support4Demos/res/layout/file_provider_example.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:padding="16dp"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <Button
+ android:text="@string/share_file"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:onClick="onShareFileClick" />
+
+</LinearLayout>
diff --git a/samples/Support4Demos/res/values/strings.xml b/samples/Support4Demos/res/values/strings.xml
index c628c1b1d..3cb4c2cfc 100644
--- a/samples/Support4Demos/res/values/strings.xml
+++ b/samples/Support4Demos/res/values/strings.xml
@@ -134,6 +134,7 @@
<string name="sharing_support_title">ShareCompat Demo</string>
<string name="sharing_receiver_title">ShareCompat Receiver</string>
+ <string name="file_provider_example">FileProvider example</string>
<string name="drawer_layout_support">Widget/Drawer layout</string>
<string name="drawer_layout_summary">This activity illustrates the use of sliding drawers. The drawer may be pulled out from the left edge with an edge swipe. If this demo is running on Ice Cream Sandwich or newer you may tap the icon at the left side of the action bar to open the drawer as well.</string>
diff --git a/samples/Support4Demos/res/xml/my_paths.xml b/samples/Support4Demos/res/xml/my_paths.xml
new file mode 100644
index 000000000..f7223d30b
--- /dev/null
+++ b/samples/Support4Demos/res/xml/my_paths.xml
@@ -0,0 +1,14 @@
+<!-- BEGIN_INCLUDE(file_provider_paths_declaration) -->
+<paths xmlns:android="http://schemas.android.com/apk/res/android">
+ <!-- Offer access to files under Context.getFilesDir() + "thumbs/"
+ through alias "my_thumbs" -->
+ <files-path name="my_thumbs" path="thumbs/" />
+
+ <!-- Offer access to files under Environment.getExternalStorageDirectory()
+ through alias "my_external" -->
+ <external-path name="my_external" />
+
+ <!-- Offer access to files under "/proc" through alias "my_proc" -->
+ <root-path name="my_proc" path="proc/" />
+</paths>
+<!-- END_INCLUDE(file_provider_paths_declaration) -->
diff --git a/samples/Support4Demos/src/com/example/android/supportv4/content/FileProviderExample.java b/samples/Support4Demos/src/com/example/android/supportv4/content/FileProviderExample.java
new file mode 100644
index 000000000..926c63228
--- /dev/null
+++ b/samples/Support4Demos/src/com/example/android/supportv4/content/FileProviderExample.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2011 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.supportv4.content;
+import android.app.Activity;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v4.content.FileProvider;
+import android.view.View;
+
+import com.example.android.supportv4.R;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ * Sample that shows how private files can be easily shared.
+ */
+public class FileProviderExample extends Activity {
+ private static final String AUTHORITY = "com.example.android.supportv4.my_files";
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.file_provider_example);
+ }
+
+ public void onShareFileClick(View view) {
+ // Save a thumbnail to file
+ final File thumbsDir = new File(getFilesDir(), "thumbs");
+ thumbsDir.mkdirs();
+ final File file = new File(thumbsDir, "private.png");
+ saveThumbnail(view, file);
+
+ // Now share that private file using FileProvider
+ final Uri uri = FileProvider.getUriForFile(this, AUTHORITY, file);
+ final Intent intent = new Intent(Intent.ACTION_SEND);
+ intent.setType("image/png");
+ intent.putExtra(Intent.EXTRA_STREAM, uri);
+ startActivity(intent);
+ }
+
+ /**
+ * Save thumbnail of given {@link View} to {@link File}.
+ */
+ private void saveThumbnail(View view, File file) {
+ final Bitmap bitmap = Bitmap.createBitmap(
+ view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
+ final Canvas canvas = new Canvas(bitmap);
+ view.draw(canvas);
+
+ try {
+ final OutputStream os = new FileOutputStream(file);
+ try {
+ bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
+ } finally {
+ os.close();
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}