Home | History | Annotate | Download | only in receiveshare
      1 /**
      2  * Copyright (c) 2015, 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.example.android.receiveshare;
     18 
     19 import android.app.Activity;
     20 import android.content.ClipData;
     21 import android.content.ContentResolver;
     22 import android.content.Intent;
     23 import android.content.res.AssetFileDescriptor;
     24 import android.net.Uri;
     25 import android.os.Bundle;
     26 import android.text.SpannableStringBuilder;
     27 import android.view.View;
     28 import android.widget.Button;
     29 import android.widget.TextView;
     30 
     31 import java.io.FileNotFoundException;
     32 import java.io.IOException;
     33 
     34 public class ReceiveShare extends Activity {
     35     static Uri getShareUri(Intent intent) {
     36         Uri uri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
     37         if (uri == null) {
     38             ClipData clip = intent.getClipData();
     39             if (clip != null && clip.getItemCount() > 0) {
     40                 uri = clip.getItemAt(0).getUri();
     41             }
     42         }
     43         return uri;
     44     }
     45 
     46     static CharSequence buildShareInfo(ContentResolver resolver, Intent intent) {
     47         SpannableStringBuilder sb = new SpannableStringBuilder();
     48         if (intent.getType() != null) {
     49             sb.append("Type: "); sb.append(intent.getType()); sb.append("\n");
     50         }
     51         CharSequence text = intent.getCharSequenceExtra(Intent.EXTRA_TEXT);
     52         if (text != null) {
     53             sb.append("Text: "); sb.append(text);
     54             String html = intent.getStringExtra(Intent.EXTRA_HTML_TEXT);
     55             if (html != null) {
     56                 sb.append("\n\n"); sb.append("HTML: "); sb.append(html);
     57             }
     58         } else {
     59             Uri uri = getShareUri(intent);
     60             if (uri != null) {
     61                 sb.append("Uri: "); sb.append(uri.toString()); sb.append("\n");
     62                 try {
     63                     AssetFileDescriptor afd = resolver.openAssetFileDescriptor(
     64                             uri, "r");
     65                     sb.append("Start offset: ");
     66                     sb.append(Long.toString(afd.getStartOffset()));
     67                     sb.append("\n");
     68                     sb.append("Length: ");
     69                     sb.append(Long.toString(afd.getLength()));
     70                     sb.append("\n");
     71                     afd.close();
     72                 } catch (FileNotFoundException e) {
     73                     sb.append(e.toString());
     74                 } catch (SecurityException e) {
     75                     sb.append(e.toString());
     76                 } catch (IOException e) {
     77                     sb.append(e.toString());
     78                 }
     79             }
     80         }
     81         return sb;
     82     }
     83 
     84     @Override
     85     protected void onCreate(Bundle savedInstanceState) {
     86         super.onCreate(savedInstanceState);
     87 
     88         setContentView(R.layout.receive_share);
     89 
     90         Button sendButton = (Button)findViewById(R.id.send_to_service);
     91         final Uri uri = getShareUri(getIntent());
     92         if (uri != null) {
     93             sendButton.setEnabled(true);
     94         } else {
     95             sendButton.setEnabled(false);
     96         }
     97 
     98         TextView content = (TextView)findViewById(R.id.receive_share_data);
     99         content.append(buildShareInfo(getContentResolver(), getIntent()));
    100 
    101         // Watch for button clicks.
    102         sendButton.setOnClickListener(new View.OnClickListener() {
    103             @Override
    104             public void onClick(View v) {
    105                 Intent intent = new Intent(ReceiveShare.this, ReceiveShareService.class);
    106                 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    107                 ClipData clip = ClipData.newUri(getContentResolver(), "Something", uri);
    108                 intent.setClipData(clip);
    109                 startService(intent);
    110                 finish();
    111             }
    112         });
    113     }
    114 }
    115