Skip to content

Most visited

Recently visited

navigation
DirectShare / src / com.example.android.directshare /

SendMessageActivity.java

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
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
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
     */
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
     */
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
     */
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 dummy message.
145
     */
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
}
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.