• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2013 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.documentsui;
18 
19 import android.app.Activity;
20 import android.content.Context;
21 import android.content.Intent;
22 import android.net.Uri;
23 import android.os.Bundle;
24 import android.provider.DocumentsContract;
25 import android.util.Log;
26 import android.view.View;
27 import android.view.View.OnClickListener;
28 import android.widget.Button;
29 import android.widget.CheckBox;
30 import android.widget.LinearLayout;
31 import android.widget.ScrollView;
32 import android.widget.TextView;
33 
34 import libcore.io.IoUtils;
35 import libcore.io.Streams;
36 
37 import java.io.InputStream;
38 import java.io.OutputStream;
39 
40 public class TestActivity extends Activity {
41     private static final String TAG = "TestActivity";
42 
43     private static final int CODE_READ = 42;
44     private static final int CODE_WRITE = 43;
45 
46     private TextView mResult;
47 
48     @Override
onCreate(Bundle icicle)49     public void onCreate(Bundle icicle) {
50         super.onCreate(icicle);
51 
52         final Context context = this;
53 
54         final LinearLayout view = new LinearLayout(context);
55         view.setOrientation(LinearLayout.VERTICAL);
56 
57         mResult = new TextView(context);
58         view.addView(mResult);
59 
60         final CheckBox multiple = new CheckBox(context);
61         multiple.setText("ALLOW_MULTIPLE");
62         view.addView(multiple);
63         final CheckBox localOnly = new CheckBox(context);
64         localOnly.setText("LOCAL_ONLY");
65         view.addView(localOnly);
66 
67         Button button;
68         button = new Button(context);
69         button.setText("OPEN_DOC */*");
70         button.setOnClickListener(new OnClickListener() {
71             @Override
72             public void onClick(View v) {
73                 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
74                 intent.addCategory(Intent.CATEGORY_OPENABLE);
75                 intent.setType("*/*");
76                 if (multiple.isChecked()) {
77                     intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
78                 }
79                 if (localOnly.isChecked()) {
80                     intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
81                 }
82                 startActivityForResult(intent, CODE_READ);
83             }
84         });
85         view.addView(button);
86 
87         button = new Button(context);
88         button.setText("OPEN_DOC image/*");
89         button.setOnClickListener(new OnClickListener() {
90             @Override
91             public void onClick(View v) {
92                 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
93                 intent.addCategory(Intent.CATEGORY_OPENABLE);
94                 intent.setType("image/*");
95                 if (multiple.isChecked()) {
96                     intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
97                 }
98                 if (localOnly.isChecked()) {
99                     intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
100                 }
101                 startActivityForResult(intent, CODE_READ);
102             }
103         });
104         view.addView(button);
105 
106         button = new Button(context);
107         button.setText("OPEN_DOC audio/ogg");
108         button.setOnClickListener(new OnClickListener() {
109             @Override
110             public void onClick(View v) {
111                 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
112                 intent.addCategory(Intent.CATEGORY_OPENABLE);
113                 intent.setType("audio/ogg");
114                 if (multiple.isChecked()) {
115                     intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
116                 }
117                 if (localOnly.isChecked()) {
118                     intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
119                 }
120                 startActivityForResult(intent, CODE_READ);
121             }
122         });
123         view.addView(button);
124 
125         button = new Button(context);
126         button.setText("OPEN_DOC text/plain, application/msword");
127         button.setOnClickListener(new OnClickListener() {
128             @Override
129             public void onClick(View v) {
130                 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
131                 intent.addCategory(Intent.CATEGORY_OPENABLE);
132                 intent.setType("*/*");
133                 intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {
134                         "text/plain", "application/msword" });
135                 if (multiple.isChecked()) {
136                     intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
137                 }
138                 if (localOnly.isChecked()) {
139                     intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
140                 }
141                 startActivityForResult(intent, CODE_READ);
142             }
143         });
144         view.addView(button);
145 
146         button = new Button(context);
147         button.setText("CREATE_DOC text/plain");
148         button.setOnClickListener(new OnClickListener() {
149             @Override
150             public void onClick(View v) {
151                 Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
152                 intent.addCategory(Intent.CATEGORY_OPENABLE);
153                 intent.setType("text/plain");
154                 intent.putExtra(Intent.EXTRA_TITLE, "foobar.txt");
155                 if (localOnly.isChecked()) {
156                     intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
157                 }
158                 startActivityForResult(intent, CODE_WRITE);
159             }
160         });
161         view.addView(button);
162 
163         button = new Button(context);
164         button.setText("CREATE_DOC image/png");
165         button.setOnClickListener(new OnClickListener() {
166             @Override
167             public void onClick(View v) {
168                 Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
169                 intent.addCategory(Intent.CATEGORY_OPENABLE);
170                 intent.setType("image/png");
171                 intent.putExtra(Intent.EXTRA_TITLE, "mypicture.png");
172                 if (localOnly.isChecked()) {
173                     intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
174                 }
175                 startActivityForResult(intent, CODE_WRITE);
176             }
177         });
178         view.addView(button);
179 
180         button = new Button(context);
181         button.setText("GET_CONTENT */*");
182         button.setOnClickListener(new OnClickListener() {
183             @Override
184             public void onClick(View v) {
185                 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
186                 intent.addCategory(Intent.CATEGORY_OPENABLE);
187                 intent.setType("*/*");
188                 if (multiple.isChecked()) {
189                     intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
190                 }
191                 if (localOnly.isChecked()) {
192                     intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
193                 }
194                 startActivityForResult(Intent.createChooser(intent, "Kittens!"), CODE_READ);
195             }
196         });
197         view.addView(button);
198 
199         final ScrollView scroll = new ScrollView(context);
200         scroll.addView(view);
201 
202         setContentView(scroll);
203     }
204 
205     @Override
onActivityResult(int requestCode, int resultCode, Intent data)206     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
207         mResult.setText(null);
208         String result = "resultCode=" + resultCode + ", data=" + String.valueOf(data);
209 
210         if (requestCode == CODE_READ) {
211             final Uri uri = data != null ? data.getData() : null;
212             if (uri != null) {
213                 if (DocumentsContract.isDocumentUri(this, uri)) {
214                     result += "; DOC_ID";
215                 }
216                 try {
217                     getContentResolver().takePersistableUriPermission(
218                             uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
219                 } catch (SecurityException e) {
220                     result += "; FAILED TO TAKE";
221                     Log.e(TAG, "Failed to take", e);
222                 }
223                 InputStream is = null;
224                 try {
225                     is = getContentResolver().openInputStream(uri);
226                     final int length = Streams.readFullyNoClose(is).length;
227                     result += "; read length=" + length;
228                 } catch (Exception e) {
229                     result += "; ERROR";
230                     Log.e(TAG, "Failed to read " + uri, e);
231                 } finally {
232                     IoUtils.closeQuietly(is);
233                 }
234             } else {
235                 result += "no uri?";
236             }
237         } else if (requestCode == CODE_WRITE) {
238             final Uri uri = data != null ? data.getData() : null;
239             if (uri != null) {
240                 if (DocumentsContract.isDocumentUri(this, uri)) {
241                     result += "; DOC_ID";
242                 }
243                 try {
244                     getContentResolver().takePersistableUriPermission(
245                             uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
246                 } catch (SecurityException e) {
247                     result += "; FAILED TO TAKE";
248                     Log.e(TAG, "Failed to take", e);
249                 }
250                 OutputStream os = null;
251                 try {
252                     os = getContentResolver().openOutputStream(uri);
253                     os.write("THE COMPLETE WORKS OF SHAKESPEARE".getBytes());
254                 } catch (Exception e) {
255                     result += "; ERROR";
256                     Log.e(TAG, "Failed to write " + uri, e);
257                 } finally {
258                     IoUtils.closeQuietly(os);
259                 }
260             } else {
261                 result += "no uri?";
262             }
263         }
264 
265         Log.d(TAG, result);
266         mResult.setText(result);
267     }
268 }
269