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.directshare;
18 
19 import android.app.Activity;
20 import android.content.Intent;
21 import android.os.Bundle;
22 import android.view.View;
23 import android.widget.TextView;
24 import android.widget.Toast;
25 
26 /**
27  * Provides the UI for sharing a text with a {@link Contact}.
28  */
29 public class SendMessageActivity extends Activity {
30 
31     /**
32      * The request code for {@link SelectContactActivity}. This is used when the user doesn't select
33      * any of Direct Share icons.
34      */
35     private static final int REQUEST_SELECT_CONTACT = 1;
36 
37     /**
38      * The text to share.
39      */
40     private String mBody;
41 
42     /**
43      * The ID of the contact to share the text with.
44      */
45     private int mContactId;
46 
47     // View references.
48     private TextView mTextContactName;
49     private TextView mTextMessageBody;
50 
51     @Override
onCreate(Bundle savedInstanceState)52     protected void onCreate(Bundle savedInstanceState) {
53         super.onCreate(savedInstanceState);
54         setContentView(R.layout.send_message);
55         setTitle(R.string.sending_message);
56         // View references.
57         mTextContactName = (TextView) findViewById(R.id.contact_name);
58         mTextMessageBody = (TextView) findViewById(R.id.message_body);
59         // Resolve the share Intent.
60         boolean resolved = resolveIntent(getIntent());
61         if (!resolved) {
62             finish();
63             return;
64         }
65         // Bind event handlers.
66         findViewById(R.id.send).setOnClickListener(mOnClickListener);
67         // Set up the UI.
68         prepareUi();
69         // The contact ID will not be passed on when the user clicks on the app icon rather than any
70         // of the Direct Share icons. In this case, we show another dialog for selecting a contact.
71         if (mContactId == Contact.INVALID_ID) {
72             selectContact();
73         }
74     }
75 
76     @Override
onActivityResult(int requestCode, int resultCode, Intent data)77     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
78         switch (requestCode) {
79             case REQUEST_SELECT_CONTACT:
80                 if (resultCode == RESULT_OK) {
81                     mContactId = data.getIntExtra(Contact.ID, Contact.INVALID_ID);
82                 }
83                 // Give up sharing the send_message if the user didn't choose a contact.
84                 if (mContactId == Contact.INVALID_ID) {
85                     finish();
86                     return;
87                 }
88                 prepareUi();
89                 break;
90             default:
91                 super.onActivityResult(requestCode, resultCode, data);
92         }
93     }
94 
95     /**
96      * Resolves the passed {@link Intent}. This method can only resolve intents for sharing a plain
97      * text. {@link #mBody} and {@link #mContactId} are modified accordingly.
98      *
99      * @param intent The {@link Intent}.
100      * @return True if the {@code intent} is resolved properly.
101      */
resolveIntent(Intent intent)102     private boolean resolveIntent(Intent intent) {
103         if (Intent.ACTION_SEND.equals(intent.getAction()) &&
104                 "text/plain".equals(intent.getType())) {
105             mBody = intent.getStringExtra(Intent.EXTRA_TEXT);
106             mContactId = intent.getIntExtra(Contact.ID, Contact.INVALID_ID);
107             return true;
108         }
109         return false;
110     }
111 
112     /**
113      * Sets up the UI.
114      */
prepareUi()115     private void prepareUi() {
116         if (mContactId != Contact.INVALID_ID) {
117             Contact contact = Contact.byId(mContactId);
118             ContactViewBinder.bind(contact, mTextContactName);
119         }
120         mTextMessageBody.setText(mBody);
121     }
122 
123     /**
124      * Delegates selection of a {@Contact} to {@link SelectContactActivity}.
125      */
selectContact()126     private void selectContact() {
127         Intent intent = new Intent(this, SelectContactActivity.class);
128         intent.setAction(SelectContactActivity.ACTION_SELECT_CONTACT);
129         startActivityForResult(intent, REQUEST_SELECT_CONTACT);
130     }
131 
132     private View.OnClickListener mOnClickListener = new View.OnClickListener() {
133         @Override
134         public void onClick(View view) {
135             switch (view.getId()) {
136                 case R.id.send:
137                     send();
138                     break;
139             }
140         }
141     };
142 
143     /**
144      * Pretends to send the text to the contact. This only shows a placeholder message.
145      */
send()146     private void send() {
147         Toast.makeText(this,
148                 getString(R.string.message_sent, mBody, Contact.byId(mContactId).getName()),
149                 Toast.LENGTH_SHORT).show();
150         finish();
151     }
152 
153 }
154