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.example.android.actionbarcompat.shareactionprovider.content; 18 19 import android.content.Context; 20 import android.content.Intent; 21 import android.net.Uri; 22 import android.text.TextUtils; 23 24 /** 25 * This class encapsulates a content item. Referencing the content's type, and the differing way 26 * to reference the content (asset URI or resource id). 27 */ 28 public class ContentItem { 29 // Used to signify an image content type 30 public static final int CONTENT_TYPE_IMAGE = 0; 31 // Used to signify a text/string content type 32 public static final int CONTENT_TYPE_TEXT = 1; 33 34 public final int contentType; 35 public final int contentResourceId; 36 public final String contentAssetFilePath; 37 38 /** 39 * Creates a ContentItem with the specified type, referencing a resource id. 40 * 41 * @param type - One of {@link #CONTENT_TYPE_IMAGE} or {@link #CONTENT_TYPE_TEXT} 42 * @param resourceId - Resource ID to use for this item's content 43 */ 44 public ContentItem(int type, int resourceId) { 45 contentType = type; 46 contentResourceId = resourceId; 47 contentAssetFilePath = null; 48 } 49 50 /** 51 * Creates a ContentItem with the specified type, referencing an asset file path. 52 * 53 * @param type - One of {@link #CONTENT_TYPE_IMAGE} or {@link #CONTENT_TYPE_TEXT} 54 * @param assetFilePath - File path from the application's asset for this item's content 55 */ 56 public ContentItem(int type, String assetFilePath) { 57 contentType = type; 58 contentAssetFilePath = assetFilePath; 59 contentResourceId = 0; 60 } 61 62 /** 63 * @return Uri to the content 64 */ 65 public Uri getContentUri() { 66 if (!TextUtils.isEmpty(contentAssetFilePath)) { 67 // If this content has an asset, then return a AssetProvider Uri 68 return Uri.parse("content://" + AssetProvider.CONTENT_URI + "/" + contentAssetFilePath); 69 } else { 70 return null; 71 } 72 } 73 74 /** 75 * Returns an {@link android.content.Intent} which can be used to share this item's content with other 76 * applications. 77 * 78 * @param context - Context to be used for fetching resources if needed 79 * @return Intent to be given to a ShareActionProvider. 80 */ 81 public Intent getShareIntent(Context context) { 82 Intent intent = new Intent(Intent.ACTION_SEND); 83 84 switch (contentType) { 85 case CONTENT_TYPE_IMAGE: 86 intent.setType("image/jpg"); 87 // Bundle the asset content uri as the EXTRA_STREAM uri 88 intent.putExtra(Intent.EXTRA_STREAM, getContentUri()); 89 break; 90 91 case CONTENT_TYPE_TEXT: 92 intent.setType("text/plain"); 93 // Get the string resource and bundle it as an intent extra 94 intent.putExtra(Intent.EXTRA_TEXT, context.getString(contentResourceId)); 95 break; 96 } 97 98 return intent; 99 } 100 101 } 102