1 /* 2 * Copyright (C) 2011 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.apis.app; 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.view.Menu; 25 import android.view.MenuItem; 26 import android.widget.ShareActionProvider; 27 28 import com.example.android.apis.R; 29 30 import java.io.FileNotFoundException; 31 import java.io.FileOutputStream; 32 import java.io.IOException; 33 import java.io.InputStream; 34 35 /** 36 * This activity demonstrates how to use an {@link android.view.ActionProvider} 37 * for adding functionality to the Action Bar. In particular this demo is adding 38 * a menu item with ShareActionProvider as its action provider. The 39 * ShareActionProvider is responsible for managing the UI for sharing actions. 40 */ 41 public class ActionBarShareActionProviderActivity extends Activity { 42 43 private static final String SHARED_FILE_NAME = "shared.png"; 44 45 @Override onCreate(Bundle savedInstanceState)46 public void onCreate(Bundle savedInstanceState) { 47 super.onCreate(savedInstanceState); 48 copyPrivateRawResuorceToPubliclyAccessibleFile(); 49 } 50 51 @Override onCreateOptionsMenu(Menu menu)52 public boolean onCreateOptionsMenu(Menu menu) { 53 // Inflate your menu. 54 getMenuInflater().inflate(R.menu.action_bar_share_action_provider, menu); 55 56 // Set file with share history to the provider and set the share intent. 57 MenuItem actionItem = menu.findItem(R.id.menu_item_share_action_provider_action_bar); 58 ShareActionProvider actionProvider = (ShareActionProvider) actionItem.getActionProvider(); 59 actionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME); 60 // Note that you can set/change the intent any time, 61 // say when the user has selected an image. 62 actionProvider.setShareIntent(createShareIntent()); 63 64 // Set file with share history to the provider and set the share intent. 65 MenuItem overflowItem = menu.findItem(R.id.menu_item_share_action_provider_overflow); 66 ShareActionProvider overflowProvider = 67 (ShareActionProvider) overflowItem.getActionProvider(); 68 overflowProvider.setShareHistoryFileName( 69 ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME); 70 // Note that you can set/change the intent any time, 71 // say when the user has selected an image. 72 overflowProvider.setShareIntent(createShareIntent()); 73 74 return true; 75 } 76 77 /** 78 * Creates a sharing {@link Intent}. 79 * 80 * @return The sharing intent. 81 */ createShareIntent()82 private Intent createShareIntent() { 83 Intent shareIntent = new Intent(Intent.ACTION_SEND); 84 shareIntent.setType("image/*"); 85 Uri uri = Uri.fromFile(getFileStreamPath("shared.png")); 86 shareIntent.putExtra(Intent.EXTRA_STREAM, uri); 87 return shareIntent; 88 } 89 90 /** 91 * Copies a private raw resource content to a publicly readable 92 * file such that the latter can be shared with other applications. 93 */ copyPrivateRawResuorceToPubliclyAccessibleFile()94 private void copyPrivateRawResuorceToPubliclyAccessibleFile() { 95 InputStream inputStream = null; 96 FileOutputStream outputStream = null; 97 try { 98 inputStream = getResources().openRawResource(R.raw.robot); 99 outputStream = openFileOutput(SHARED_FILE_NAME, 100 Context.MODE_WORLD_READABLE | Context.MODE_APPEND); 101 byte[] buffer = new byte[1024]; 102 int length = 0; 103 try { 104 while ((length = inputStream.read(buffer)) > 0){ 105 outputStream.write(buffer, 0, length); 106 } 107 } catch (IOException ioe) { 108 /* ignore */ 109 } 110 } catch (FileNotFoundException fnfe) { 111 /* ignore */ 112 } finally { 113 try { 114 inputStream.close(); 115 } catch (IOException ioe) { 116 /* ignore */ 117 } 118 try { 119 outputStream.close(); 120 } catch (IOException ioe) { 121 /* ignore */ 122 } 123 } 124 } 125 } 126