Updates DataLayer example.

Bug: 4368433
Test: Manual tests.
Change-Id: I9b37cb1f2b425713ab2b976839f21d4366bba70d
diff --git a/wearable/wear/DataLayer/Application/src/main/java/com/example/android/wearable/datalayer/MainActivity.java b/wearable/wear/DataLayer/Application/src/main/java/com/example/android/wearable/datalayer/MainActivity.java
index b7f9f8b..2f232cc 100644
--- a/wearable/wear/DataLayer/Application/src/main/java/com/example/android/wearable/datalayer/MainActivity.java
+++ b/wearable/wear/DataLayer/Application/src/main/java/com/example/android/wearable/datalayer/MainActivity.java
@@ -168,7 +168,7 @@
     }
 
     @Override
-    public void onMessageReceived(final MessageEvent messageEvent) {
+    public void onMessageReceived(MessageEvent messageEvent) {
         LOGD(TAG, "onMessageReceived() A message from watch was received:"
                 + messageEvent.getRequestId() + " " + messageEvent.getPath());
 
@@ -186,9 +186,9 @@
      * Sets up UI components and their callback handlers.
      */
     private void setupViews() {
-        mSendPhotoBtn = (Button) findViewById(R.id.sendPhoto);
-        mThumbView = (ImageView) findViewById(R.id.imageView);
-        mDataItemList = (ListView) findViewById(R.id.data_item_list);
+        mSendPhotoBtn = findViewById(R.id.sendPhoto);
+        mThumbView = findViewById(R.id.imageView);
+        mDataItemList = findViewById(R.id.data_item_list);
         mStartActivityBtn = findViewById(R.id.start_wearable_activity);
     }
 
@@ -419,4 +419,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/DataLayerListenerService.java b/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/DataLayerListenerService.java
index 020cd15..d8f2cbe 100644
--- a/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/DataLayerListenerService.java
+++ b/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/DataLayerListenerService.java
@@ -20,16 +20,14 @@
 import android.net.Uri;
 import android.util.Log;
 
-import com.google.android.gms.common.ConnectionResult;
-import com.google.android.gms.common.api.GoogleApiClient;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
 import com.google.android.gms.wearable.DataEvent;
 import com.google.android.gms.wearable.DataEventBuffer;
 import com.google.android.gms.wearable.MessageEvent;
 import com.google.android.gms.wearable.Wearable;
 import com.google.android.gms.wearable.WearableListenerService;
 
-import java.util.concurrent.TimeUnit;
-
 /**
  * Listens to DataItems and Messages from the local node.
  */
@@ -42,34 +40,16 @@
     public static final String COUNT_PATH = "/count";
     public static final String IMAGE_PATH = "/image";
     public static final String IMAGE_KEY = "photo";
-    GoogleApiClient mGoogleApiClient;
-
-    @Override
-    public void onCreate() {
-        super.onCreate();
-        mGoogleApiClient = new GoogleApiClient.Builder(this)
-                .addApi(Wearable.API)
-                .build();
-        mGoogleApiClient.connect();
-    }
 
     @Override
     public void onDataChanged(DataEventBuffer dataEvents) {
-        LOGD(TAG, "onDataChanged: " + dataEvents);
-        if (!mGoogleApiClient.isConnected() || !mGoogleApiClient.isConnecting()) {
-            ConnectionResult connectionResult = mGoogleApiClient
-                    .blockingConnect(30, TimeUnit.SECONDS);
-            if (!connectionResult.isSuccess()) {
-                Log.e(TAG, "DataLayerListenerService failed to connect to GoogleApiClient, "
-                        + "error code: " + connectionResult.getErrorCode());
-                return;
-            }
-        }
+        Log.d(TAG, "onDataChanged: " + dataEvents);
 
         // Loop through the events and send a message back to the node that created the data item.
         for (DataEvent event : dataEvents) {
             Uri uri = event.getDataItem().getUri();
             String path = uri.getPath();
+
             if (COUNT_PATH.equals(path)) {
                 // Get the node id of the node that created the data item from the host portion of
                 // the uri.
@@ -78,15 +58,28 @@
                 byte[] payload = uri.toString().getBytes();
 
                 // Send the rpc
-                Wearable.MessageApi.sendMessage(mGoogleApiClient, nodeId, DATA_ITEM_RECEIVED_PATH,
-                        payload);
+                // Instantiates clients without member variables, as clients are inexpensive to
+                // create. (They are cached and shared between GoogleApi instances.)
+                Task<Integer> sendMessageTask = Wearable.getMessageClient(this)
+                        .sendMessage(nodeId, DATA_ITEM_RECEIVED_PATH, payload);
+
+                sendMessageTask.addOnCompleteListener(new OnCompleteListener<Integer>() {
+                    @Override
+                    public void onComplete(Task<Integer> task) {
+                        if (task.isSuccessful()) {
+                            Log.d(TAG, "Message sent successfully");
+                        } else {
+                            Log.d(TAG, "Message failed: " + task.getResult());
+                        }
+                    }
+                });
             }
         }
     }
 
     @Override
     public void onMessageReceived(MessageEvent messageEvent) {
-        LOGD(TAG, "onMessageReceived: " + messageEvent);
+        Log.d(TAG, "onMessageReceived: " + messageEvent);
 
         // Check to see if the message is to start an activity
         if (messageEvent.getPath().equals(START_ACTIVITY_PATH)) {
@@ -95,10 +88,4 @@
             startActivity(startIntent);
         }
     }
-
-    public static void LOGD(final String tag, String message) {
-        if (Log.isLoggable(tag, Log.DEBUG)) {
-            Log.d(tag, message);
-        }
-    }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/MainActivity.java b/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/MainActivity.java
index feec09c..0044ca0 100644
--- a/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/MainActivity.java
+++ b/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/MainActivity.java
@@ -16,8 +16,6 @@
 
 package com.example.android.wearable.datalayer;
 
-import static com.example.android.wearable.datalayer.DataLayerListenerService.LOGD;
-
 import android.app.Activity;
 import android.app.Fragment;
 import android.app.FragmentManager;
@@ -120,7 +118,7 @@
 
     @Override
     public void onDataChanged(DataEventBuffer dataEvents) {
-        LOGD(TAG, "onDataChanged(): " + dataEvents);
+        Log.d(TAG, "onDataChanged(): " + dataEvents);
 
         for (DataEvent event : dataEvents) {
             if (event.getType() == DataEvent.TYPE_CHANGED) {
@@ -133,10 +131,10 @@
                     new LoadBitmapAsyncTask().execute(photoAsset);
 
                 } else if (DataLayerListenerService.COUNT_PATH.equals(path)) {
-                    LOGD(TAG, "Data Changed for COUNT_PATH");
+                    Log.d(TAG, "Data Changed for COUNT_PATH");
                     mDataFragment.appendItem("DataItem Changed", event.getDataItem().toString());
                 } else {
-                    LOGD(TAG, "Unrecognized path: " + path);
+                    Log.d(TAG, "Unrecognized path: " + path);
                 }
 
             } else if (event.getType() == DataEvent.TYPE_DELETED) {
@@ -162,13 +160,13 @@
 
     @Override
     public void onMessageReceived(MessageEvent event) {
-        LOGD(TAG, "onMessageReceived: " + event);
+        Log.d(TAG, "onMessageReceived: " + event);
         mDataFragment.appendItem("Message", event.toString());
     }
 
     @Override
     public void onCapabilityChanged(CapabilityInfo capabilityInfo) {
-        LOGD(TAG, "onCapabilityChanged: " + capabilityInfo);
+        Log.d(TAG, "onCapabilityChanged: " + capabilityInfo);
         mDataFragment.appendItem("onCapabilityChanged", capabilityInfo.toString());
     }
 
@@ -206,7 +204,7 @@
         for (Node node : nodes) {
             nodesList.add(node.getDisplayName());
         }
-        LOGD(TAG, "Connected Nodes: " + (nodesList.isEmpty()
+        Log.d(TAG, "Connected Nodes: " + (nodesList.isEmpty()
                 ? "No connected device was found for the given capabilities"
                 : TextUtils.join(",", nodesList)));
         String msg;
@@ -322,10 +320,10 @@
         protected void onPostExecute(Bitmap bitmap) {
 
             if (bitmap != null) {
-                LOGD(TAG, "Setting background image on second page..");
+                Log.d(TAG, "Setting background image on second page..");
                 moveToPage(1);
                 mAssetFragment.setBackgroundImage(bitmap);
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/AssetFragment.java b/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/AssetFragment.java
index 879c2a7..312b086 100644
--- a/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/AssetFragment.java
+++ b/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/AssetFragment.java
@@ -39,7 +39,7 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.asset_fragment, container, false);
-        mPhoto = (ImageView) view.findViewById(R.id.photo);
+        mPhoto = view.findViewById(R.id.photo);
         return view;
     }
 
diff --git a/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/DataFragment.java b/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/DataFragment.java
index f111e7d..c8457fc 100644
--- a/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/DataFragment.java
+++ b/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/DataFragment.java
@@ -43,8 +43,8 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.data_fragment, container, false);
-        ListView dataItemList = (ListView) view.findViewById(R.id.dataItem_list);
-        mIntroText = (TextView) view.findViewById(R.id.intro);
+        ListView dataItemList = view.findViewById(R.id.dataItem_list);
+        mIntroText = view.findViewById(R.id.intro);
         mDataItemListAdapter = new DataItemAdapter(getActivity(),
                 android.R.layout.simple_list_item_1);
         dataItemList.setAdapter(mDataItemListAdapter);
@@ -78,8 +78,8 @@
                         Context.LAYOUT_INFLATER_SERVICE);
                 convertView = inflater.inflate(android.R.layout.two_line_list_item, null);
                 convertView.setTag(holder);
-                holder.text1 = (TextView) convertView.findViewById(android.R.id.text1);
-                holder.text2 = (TextView) convertView.findViewById(android.R.id.text2);
+                holder.text1 = convertView.findViewById(android.R.id.text1);
+                holder.text2 = convertView.findViewById(android.R.id.text2);
             } else {
                 holder = (ViewHolder) convertView.getTag();
             }
diff --git a/wearable/wear/DataLayer/template-params.xml b/wearable/wear/DataLayer/template-params.xml
index 1f83906..ba07ff6 100644
--- a/wearable/wear/DataLayer/template-params.xml
+++ b/wearable/wear/DataLayer/template-params.xml
@@ -26,6 +26,12 @@
 
     <multiDexEnabled>true</multiDexEnabled>
 
+    <dependency>com.android.support:recyclerview-v7:27.1.1</dependency>
+    <dependency>com.android.support:percent:27.1.1</dependency>
+
+    <dependency_wearable>com.android.support:recyclerview-v7:27.1.1</dependency_wearable>
+    <dependency_wearable>com.android.support:percent:27.1.1</dependency_wearable>
+
     <wearable>
         <has_handheld_app>true</has_handheld_app>
     </wearable>