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.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     private final String mContentAssetFilePath;
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      */
ContentItem(int type, int resourceId)44     public ContentItem(int type, int resourceId) {
45         contentType = type;
46         contentResourceId = resourceId;
47         mContentAssetFilePath = 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      */
ContentItem(int type, String assetFilePath)56     public ContentItem(int type, String assetFilePath) {
57         contentType = type;
58         mContentAssetFilePath = assetFilePath;
59         contentResourceId = 0;
60     }
61 
62     /**
63      * @return Uri to the content
64      */
getContentUri()65     public Uri getContentUri() {
66         if (!TextUtils.isEmpty(mContentAssetFilePath)) {
67             // If this content has an asset, then return a AssetProvider Uri
68             return Uri.parse("content://" + AssetProvider.CONTENT_URI + "/" + mContentAssetFilePath);
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      */
getShareIntent(Context context)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