Home | History | Annotate | Download | only in delayedconfirmation
      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.delayedconfirmation;
     18 
     19 import android.app.Activity;
     20 import android.os.Bundle;
     21 import android.util.Log;
     22 import android.view.View;
     23 import android.widget.Toast;
     24 
     25 import com.google.android.gms.common.ConnectionResult;
     26 import com.google.android.gms.common.api.GoogleApiClient;
     27 import com.google.android.gms.common.api.ResultCallback;
     28 import com.google.android.gms.wearable.MessageApi;
     29 import com.google.android.gms.wearable.MessageEvent;
     30 import com.google.android.gms.wearable.Node;
     31 import com.google.android.gms.wearable.NodeApi;
     32 import com.google.android.gms.wearable.Wearable;
     33 
     34 /**
     35  * Has a single button, used to start the Wearable MainActivity.
     36  */
     37 public class MainActivity extends Activity implements MessageApi.MessageListener,
     38         GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
     39 
     40     private static final String TAG = "DelayedConfirmation";
     41     private static final String START_ACTIVITY_PATH = "/start-activity";
     42     private static final String TIMER_SELECTED_PATH = "/timer_selected";
     43     private static final String TIMER_FINISHED_PATH = "/timer_finished";
     44     private GoogleApiClient mGoogleApiClient;
     45 
     46     @Override
     47     public void onCreate(Bundle b) {
     48         super.onCreate(b);
     49         setContentView(R.layout.main_activity);
     50         mGoogleApiClient = new GoogleApiClient.Builder(this)
     51                 .addApi(Wearable.API)
     52                 .addConnectionCallbacks(this)
     53                 .addOnConnectionFailedListener(this)
     54                 .build();
     55     }
     56 
     57     @Override
     58     protected void onResume() {
     59         super.onResume();
     60         if (!mGoogleApiClient.isConnected()) {
     61             mGoogleApiClient.connect();
     62         }
     63     }
     64 
     65     @Override
     66     protected void onDestroy() {
     67         if (mGoogleApiClient.isConnected()) {
     68             mGoogleApiClient.disconnect();
     69         }
     70         super.onDestroy();
     71     }
     72 
     73     @Override
     74     public void onConnected(Bundle bundle) {
     75         Wearable.MessageApi.addListener(mGoogleApiClient, this);
     76     }
     77 
     78     @Override
     79     public void onConnectionSuspended(int i) {
     80         Wearable.MessageApi.removeListener(mGoogleApiClient, this);
     81     }
     82 
     83     @Override
     84     public void onMessageReceived(final MessageEvent messageEvent) {
     85         runOnUiThread(new Runnable() {
     86             @Override
     87             public void run() {
     88                 if (messageEvent.getPath().equals(TIMER_SELECTED_PATH)) {
     89                     Toast.makeText(getApplicationContext(), R.string.toast_timer_selected,
     90                             Toast.LENGTH_SHORT).show();
     91                 } else if (messageEvent.getPath().equals(TIMER_FINISHED_PATH)) {
     92                     Toast.makeText(getApplicationContext(), R.string.toast_timer_finished,
     93                             Toast.LENGTH_SHORT).show();
     94                 }
     95             }
     96         });
     97 
     98     }
     99 
    100     @Override
    101     public void onConnectionFailed(ConnectionResult connectionResult) {
    102         Log.e(TAG, "Failed to connect to Google Api Client with error code "
    103                 + connectionResult.getErrorCode());
    104     }
    105 
    106     /**
    107      * Sends a message to Wearable MainActivity when button is pressed.
    108      */
    109     public void onStartWearableActivityClick(View view) {
    110         Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).setResultCallback(
    111                 new ResultCallback<NodeApi.GetConnectedNodesResult>() {
    112                     @Override
    113                     public void onResult(NodeApi.GetConnectedNodesResult getConnectedNodesResult) {
    114                         for (final Node node : getConnectedNodesResult.getNodes()) {
    115                             Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(),
    116                                     START_ACTIVITY_PATH, new byte[0]).setResultCallback(
    117                                     getSendMessageResultCallback());
    118                         }
    119                     }
    120                 });
    121     }
    122 
    123     private ResultCallback<MessageApi.SendMessageResult> getSendMessageResultCallback() {
    124         return new ResultCallback<MessageApi.SendMessageResult>() {
    125             @Override
    126             public void onResult(MessageApi.SendMessageResult sendMessageResult) {
    127                 if (!sendMessageResult.getStatus().isSuccess()) {
    128                     Log.e(TAG, "Failed to connect to Google Api Client with status "
    129                             + sendMessageResult.getStatus());
    130                 }
    131             }
    132         };
    133     }
    134 }
    135