Skip to content

Most visited

Recently visited

navigation
ElizaChat / src / com.example.android.wearable.elizachat /

ResponderService.java

1
/*
2
 * Copyright (C) 2014 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.wearable.elizachat;
18
 
19
import android.app.Notification;
20
import android.app.PendingIntent;
21
import android.app.Service;
22
import android.content.Intent;
23
import android.graphics.BitmapFactory;
24
import android.os.Bundle;
25
import android.os.IBinder;
26
import android.support.v4.app.NotificationCompat;
27
import android.support.v4.app.RemoteInput;
28
import android.support.v4.content.LocalBroadcastManager;
29
import android.support.v4.app.NotificationManagerCompat;
30
import android.text.TextUtils;
31
import android.util.Log;
32
 
33
/**
34
 * A service that runs in the background and provides responses to the incoming messages from the
35
 * wearable. It also keeps a record of the chat session history, which it can provide upon request.
36
 */
37
public class ResponderService extends Service {
38
 
39
    public static final String ACTION_INCOMING = "com.example.android.wearable.elizachat.INCOMING";
40
 
41
    public static final String ACTION_RESPONSE = "com.example.android.wearable.elizachat.REPLY";
42
 
43
    public static final String EXTRA_REPLY = "reply";
44
 
45
    private static final String TAG = "ResponderService";
46
 
47
    private ElizaResponder mResponder;
48
 
49
    private String mLastResponse = null;
50
 
51
    private StringBuffer mCompleteConversation = new StringBuffer();
52
 
53
    private LocalBroadcastManager mBroadcastManager;
54
 
55
    @Override
56
    public void onCreate() {
57
        super.onCreate();
58
        if (Log.isLoggable(TAG, Log.DEBUG)) {
59
            Log.d(TAG, "Chat Service started");
60
        }
61
        mResponder = new ElizaResponder();
62
        mBroadcastManager = LocalBroadcastManager.getInstance(this);
63
        processIncoming(null);
64
    }
65
 
66
    @Override
67
    public IBinder onBind(Intent intent) {
68
        return null;
69
    }
70
 
71
    @Override
72
    public int onStartCommand(Intent intent, int flags, int startId) {
73
        if (null == intent || null == intent.getAction()) {
74
            return Service.START_STICKY;
75
        }
76
        String action = intent.getAction();
77
        if (action.equals(ACTION_RESPONSE)) {
78
            Bundle remoteInputResults = RemoteInput.getResultsFromIntent(intent);
79
            CharSequence replyMessage = "";
80
            if (remoteInputResults != null) {
81
                replyMessage = remoteInputResults.getCharSequence(EXTRA_REPLY);
82
            }
83
            processIncoming(replyMessage.toString());
84
        } else if (action.equals(MainActivity.ACTION_GET_CONVERSATION)) {
85
            broadcastMessage(mCompleteConversation.toString());
86
        }
87
        return Service.START_STICKY;
88
    }
89
 
90
    private void showNotification() {
91
        if (Log.isLoggable(TAG, Log.DEBUG)) {
92
            Log.d(TAG, "Sent: " + mLastResponse);
93
        }
94
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
95
                .setContentTitle(getString(R.string.eliza))
96
                .setContentText(mLastResponse)
97
                .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.bg_eliza))
98
                .setSmallIcon(R.drawable.bg_eliza)
99
                .setPriority(NotificationCompat.PRIORITY_DEFAULT);
100
 
101
        Intent intent = new Intent(ACTION_RESPONSE);
102
        PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent,
103
                PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_CANCEL_CURRENT);
104
        Notification notification = builder
105
                .extend(new NotificationCompat.WearableExtender()
106
                        .addAction(new NotificationCompat.Action.Builder(
107
                                R.drawable.ic_full_reply, getString(R.string.reply), pendingIntent)
108
                                .addRemoteInput(new RemoteInput.Builder(EXTRA_REPLY)
109
                                        .setLabel(getString(R.string.reply))
110
                                        .build())
111
                                .build()))
112
                .build();
113
        NotificationManagerCompat.from(this).notify(0, notification);
114
    }
115
 
116
    private void processIncoming(String text) {
117
        if (Log.isLoggable(TAG, Log.DEBUG)) {
118
            Log.d(TAG, "Received: " + text);
119
        }
120
        mLastResponse = mResponder.elzTalk(text);
121
        String line = TextUtils.isEmpty(text) ? mLastResponse : text + "\n" + mLastResponse;
122
 
123
        // Send a new line of conversation to update the Activity, unless the incoming text was
124
        // empty.
125
        if (!TextUtils.isEmpty(text)) {
126
            broadcastMessage(line);
127
        }
128
        NotificationManagerCompat.from(this).cancelAll();
129
        showNotification();
130
        mCompleteConversation.append("\n" + line);
131
    }
132
 
133
    private void broadcastMessage(String message) {
134
        Intent intent = new Intent(MainActivity.ACTION_NOTIFY);
135
        intent.putExtra(MainActivity.EXTRA_MESSAGE, message);
136
        mBroadcastManager.sendBroadcast(intent);
137
    }
138
 
139
    @Override
140
    public void onDestroy() {
141
        if (Log.isLoggable(TAG, Log.DEBUG)) {
142
            Log.d(TAG, "Chat Service stopped");
143
        }
144
        NotificationManagerCompat.from(this).cancel(0);
145
        mBroadcastManager = null;
146
        super.onDestroy();
147
    }
148
}
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!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in