diff --git a/wearable/wear/WearComplicationProvidersTestSuite/Wearable/build.gradle b/wearable/wear/WearComplicationProvidersTestSuite/Wearable/build.gradle
index 84288bb..39ddaf8 100644
--- a/wearable/wear/WearComplicationProvidersTestSuite/Wearable/build.gradle
+++ b/wearable/wear/WearComplicationProvidersTestSuite/Wearable/build.gradle
@@ -6,7 +6,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.1.3'
     }
 }
 
@@ -21,15 +21,15 @@
 
 dependencies {
 
-    compile 'com.android.support:appcompat-v7:27.1.0'
+    implementation 'com.android.support:appcompat-v7:27.1.1'
 
 
-    compile 'com.google.android.gms:play-services-wearable:11.8.0'
-    compile 'com.android.support:support-v13:27.1.0'
+    implementation 'com.google.android.gms:play-services-wearable:15.0.1'
+    implementation 'com.android.support:support-v13:27.1.1'
 
-    provided 'com.google.android.wearable:wearable:2.3.0'
+    compileOnly 'com.google.android.wearable:wearable:2.3.0'
 
-    compile 'com.google.android.support:wearable:2.3.0'
+    implementation 'com.google.android.support:wearable:2.3.0'
 
 }
 
diff --git a/wearable/wear/WearComplicationProvidersTestSuite/template-params.xml b/wearable/wear/WearComplicationProvidersTestSuite/template-params.xml
index 9270990..8cb8692 100644
--- a/wearable/wear/WearComplicationProvidersTestSuite/template-params.xml
+++ b/wearable/wear/WearComplicationProvidersTestSuite/template-params.xml
@@ -30,7 +30,7 @@
         <has_handheld_app>false</has_handheld_app>
     </wearable>
 
-    <dependency_wearable>com.android.support:appcompat-v7:27.1.0</dependency_wearable>
+    <dependency_wearable>com.android.support:appcompat-v7:27.1.1</dependency_wearable>
 
     <strings>
         <intro>
diff --git a/wearable/wear/WearDrawers/Wearable/build.gradle b/wearable/wear/WearDrawers/Wearable/build.gradle
index 6a22d1c..d52e606 100644
--- a/wearable/wear/WearDrawers/Wearable/build.gradle
+++ b/wearable/wear/WearDrawers/Wearable/build.gradle
@@ -6,7 +6,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.1.3'
     }
 }
 
@@ -21,15 +21,15 @@
 
 dependencies {
 
-    compile 'com.android.support:wear:27.1.0'
+    implementation 'com.android.support:wear:27.1.1'
 
 
-    compile 'com.google.android.gms:play-services-wearable:11.8.0'
-    compile 'com.android.support:support-v13:27.1.0'
+    implementation 'com.google.android.gms:play-services-wearable:15.0.1'
+    implementation 'com.android.support:support-v13:27.1.1'
 
-    provided 'com.google.android.wearable:wearable:2.3.0'
+    compileOnly 'com.google.android.wearable:wearable:2.3.0'
 
-    compile 'com.google.android.support:wearable:2.3.0'
+    implementation 'com.google.android.support:wearable:2.3.0'
 
 }
 
diff --git a/wearable/wear/WearDrawers/Wearable/src/main/java/com/example/android/wearable/wear/weardrawers/MainActivity.java b/wearable/wear/WearDrawers/Wearable/src/main/java/com/example/android/wearable/wear/weardrawers/MainActivity.java
index c90583b..88d71f5 100644
--- a/wearable/wear/WearDrawers/Wearable/src/main/java/com/example/android/wearable/wear/weardrawers/MainActivity.java
+++ b/wearable/wear/WearDrawers/Wearable/src/main/java/com/example/android/wearable/wear/weardrawers/MainActivity.java
@@ -15,7 +15,6 @@
  */
 package com.example.android.wearable.wear.weardrawers;
 
-import android.app.Activity;
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.content.Context;
@@ -24,7 +23,8 @@
 import android.graphics.ColorMatrixColorFilter;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.support.wear.widget.drawer.WearableActionDrawerView;
 import android.support.wear.widget.drawer.WearableNavigationDrawerView;
 import android.util.Log;
@@ -40,8 +40,8 @@
 /**
  * Demonstrates use of Navigation and Action Drawers on Wear.
  */
-public class MainActivity extends Activity implements
-        AmbientMode.AmbientCallbackProvider,
+public class MainActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider,
         MenuItem.OnMenuItemClickListener,
         WearableNavigationDrawerView.OnItemSelectedListener {
 
@@ -63,7 +63,7 @@
         setContentView(R.layout.activity_main);
 
         // Enables Ambient mode.
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
         mSolarSystem = initializeSolarSystem();
         mSelectedPlanet = 0;
@@ -223,7 +223,7 @@
                 LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
             View rootView = inflater.inflate(R.layout.fragment_planet, container, false);
 
-            mImageView = ((ImageView) rootView.findViewById(R.id.image));
+            mImageView = rootView.findViewById(R.id.image);
 
             int imageIdToLoad = getArguments().getInt(ARG_PLANET_IMAGE_ID);
             mImageView.setImageResource(imageIdToLoad);
@@ -257,11 +257,11 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {
         /** Prepares the UI for ambient mode. */
         @Override
         public void onEnterAmbient(Bundle ambientDetails) {
@@ -283,4 +283,4 @@
             mWearableActionDrawer.getController().peekDrawer();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/WearDrawers/template-params.xml b/wearable/wear/WearDrawers/template-params.xml
index 4b8ccdf..23b3271 100644
--- a/wearable/wear/WearDrawers/template-params.xml
+++ b/wearable/wear/WearDrawers/template-params.xml
@@ -26,7 +26,7 @@
 
     <multiDexEnabled>true</multiDexEnabled>
 
-    <dependency_wearable>com.android.support:wear:27.1.0</dependency_wearable>
+    <dependency_wearable>com.android.support:wear:27.1.1</dependency_wearable>
 
     <strings>
         <intro>
diff --git a/wearable/wear/WearHighBandwidthNetworking/Wearable/build.gradle b/wearable/wear/WearHighBandwidthNetworking/Wearable/build.gradle
index c56f3a1..6b309ec 100644
--- a/wearable/wear/WearHighBandwidthNetworking/Wearable/build.gradle
+++ b/wearable/wear/WearHighBandwidthNetworking/Wearable/build.gradle
@@ -6,7 +6,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.1.3'
     }
 }
 
@@ -21,15 +21,15 @@
 
 dependencies {
 
-    compile 'com.android.support:wear:27.1.0'
+    implementation 'com.android.support:wear:27.1.1'
 
 
-    compile 'com.google.android.gms:play-services-wearable:11.8.0'
-    compile 'com.android.support:support-v13:27.1.0'
+    implementation 'com.google.android.gms:play-services-wearable:15.0.1'
+    implementation 'com.android.support:support-v13:27.1.1'
 
-    provided 'com.google.android.wearable:wearable:2.3.0'
+    compileOnly 'com.google.android.wearable:wearable:2.3.0'
 
-    compile 'com.google.android.support:wearable:2.3.0'
+    implementation 'com.google.android.support:wearable:2.3.0'
 
 }
 
diff --git a/wearable/wear/WearHighBandwidthNetworking/Wearable/src/main/java/com/example/android/wearable/wear/wearhighbandwidthnetworking/MainActivity.java b/wearable/wear/WearHighBandwidthNetworking/Wearable/src/main/java/com/example/android/wearable/wear/wearhighbandwidthnetworking/MainActivity.java
index b2161ed..726d3e3 100644
--- a/wearable/wear/WearHighBandwidthNetworking/Wearable/src/main/java/com/example/android/wearable/wear/wearhighbandwidthnetworking/MainActivity.java
+++ b/wearable/wear/WearHighBandwidthNetworking/Wearable/src/main/java/com/example/android/wearable/wear/wearhighbandwidthnetworking/MainActivity.java
@@ -31,6 +31,7 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import java.lang.ref.WeakReference;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -60,7 +61,7 @@
     private ConnectivityManager.NetworkCallback mNetworkCallback;
 
     // Handler for dealing with network connection timeouts.
-    private Handler mHandler;
+    private final TimeOutHandler mTimeOutHandler = new TimeOutHandler(this);
 
     private ImageView mConnectivityIcon;
     private TextView mConnectivityText;
@@ -93,32 +94,19 @@
 
         getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
 
-        mConnectivityIcon = (ImageView) findViewById(R.id.connectivity_icon);
-        mConnectivityText = (TextView) findViewById(R.id.connectivity_text);
+        mConnectivityIcon = findViewById(R.id.connectivity_icon);
+        mConnectivityText = findViewById(R.id.connectivity_text);
 
         mProgressBar = findViewById(R.id.progress_bar);
 
         mButton = findViewById(R.id.button);
         mButton.setTag(TAG_REQUEST_NETWORK);
-        mButtonIcon = (ImageView) findViewById(R.id.button_icon);
-        mButtonText = (TextView) findViewById(R.id.button_label);
+        mButtonIcon = findViewById(R.id.button_icon);
+        mButtonText = findViewById(R.id.button_label);
 
-        mInfoText = (TextView) findViewById(R.id.info_text);
+        mInfoText = findViewById(R.id.info_text);
 
         mConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
-
-        mHandler = new Handler() {
-            @Override
-            public void handleMessage(Message msg) {
-                switch (msg.what) {
-                    case MESSAGE_CONNECTIVITY_TIMEOUT:
-                        Log.d(LOG_TAG, "Network connection timeout");
-                        setUiState(UI_STATE_CONNECTION_TIMEOUT);
-                        unregisterNetworkCallback();
-                        break;
-                }
-            }
-        };
     }
 
     @Override
@@ -159,11 +147,8 @@
         int bandwidth = mConnectivityManager
                 .getNetworkCapabilities(network).getLinkDownstreamBandwidthKbps();
 
-        if (bandwidth >= MIN_NETWORK_BANDWIDTH_KBPS) {
-            return true;
-        }
+        return bandwidth >= MIN_NETWORK_BANDWIDTH_KBPS;
 
-        return false;
     }
 
     private void requestHighBandwidthNetwork() {
@@ -185,7 +170,7 @@
         mNetworkCallback = new ConnectivityManager.NetworkCallback() {
             @Override
             public void onAvailable(final Network network) {
-                mHandler.removeMessages(MESSAGE_CONNECTIVITY_TIMEOUT);
+                mTimeOutHandler.removeMessages(MESSAGE_CONNECTIVITY_TIMEOUT);
 
                 runOnUiThread(new Runnable() {
                     @Override
@@ -230,8 +215,8 @@
         // requires android.permission.CHANGE_NETWORK_STATE
         mConnectivityManager.requestNetwork(request, mNetworkCallback);
 
-        mHandler.sendMessageDelayed(
-                mHandler.obtainMessage(MESSAGE_CONNECTIVITY_TIMEOUT),
+        mTimeOutHandler.sendMessageDelayed(
+                mTimeOutHandler.obtainMessage(MESSAGE_CONNECTIVITY_TIMEOUT),
                 NETWORK_CONNECTIVITY_TIMEOUT_MS);
     }
 
@@ -337,4 +322,26 @@
                 break;
         }
     }
-}
\ No newline at end of file
+
+    private static class TimeOutHandler extends Handler {
+        private final WeakReference<MainActivity> mMainActivityWeakReference;
+
+        TimeOutHandler(MainActivity mainActivity) {
+            mMainActivityWeakReference = new WeakReference<>(mainActivity);
+        }
+        @Override
+        public void handleMessage(Message msg) {
+            MainActivity mainActivity = mMainActivityWeakReference.get();
+
+            if (mainActivity != null) {
+                switch (msg.what) {
+                    case MESSAGE_CONNECTIVITY_TIMEOUT:
+                        Log.d(LOG_TAG, "Network connection timeout");
+                        mainActivity.setUiState(UI_STATE_CONNECTION_TIMEOUT);
+                        mainActivity.unregisterNetworkCallback();
+                        break;
+                }
+            }
+        }
+    }
+}
diff --git a/wearable/wear/WearHighBandwidthNetworking/template-params.xml b/wearable/wear/WearHighBandwidthNetworking/template-params.xml
index 5648a3e..9e463a0 100644
--- a/wearable/wear/WearHighBandwidthNetworking/template-params.xml
+++ b/wearable/wear/WearHighBandwidthNetworking/template-params.xml
@@ -31,7 +31,7 @@
 
     <!-- Include additional dependencies here.-->
     <!-- dependency>com.google.android.gms:play-services:5.0.+</dependency -->
-    <dependency_wearable>com.android.support:wear:27.1.0</dependency_wearable>
+    <dependency_wearable>com.android.support:wear:27.1.1</dependency_wearable>
 
 
     <strings>
@@ -142,4 +142,4 @@
 ]]>
         </intro>
     </metadata>
-</sample>
\ No newline at end of file
+</sample>
