Merge "Lint fixes for AppRestrictions sample." into nyc-mr1-dev
diff --git a/content/webview/PermissionRequest/Application/src/main/assets/sample.js b/content/webview/PermissionRequest/Application/src/main/assets/sample.js
index e2806a0..b9d2fdc 100644
--- a/content/webview/PermissionRequest/Application/src/main/assets/sample.js
+++ b/content/webview/PermissionRequest/Application/src/main/assets/sample.js
@@ -20,7 +20,7 @@
     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;
     window.URL = window.URL || window.webkitURL;
 
-    window.onload = function () {
+    document.addEventListener('DOMContentLoaded', function () {
 
         var video = document.querySelector('#video'),
             toggle = document.querySelector('#toggle'),
@@ -42,7 +42,13 @@
                     console.error('Error starting camera. Denied.');
                 });
             } else {
-                stream.stop();
+                if (stream.getTracks) {
+                    stream.getTracks().forEach(function (track) {
+                        track.stop();
+                    });
+                } else if (stream.stop) {
+                    stream.stop();
+                }
                 stream = null;
                 toggle.innerText = 'Start';
                 console.log('Stopped');
@@ -51,6 +57,6 @@
 
         console.log('Page loaded');
 
-    };
+    });
 
 })();
diff --git a/content/webview/PermissionRequest/Application/src/main/java/com/example/android/permissionrequest/ConfirmationDialogFragment.java b/content/webview/PermissionRequest/Application/src/main/java/com/example/android/permissionrequest/ConfirmationDialogFragment.java
index 7dae56e..ca173b4 100644
--- a/content/webview/PermissionRequest/Application/src/main/java/com/example/android/permissionrequest/ConfirmationDialogFragment.java
+++ b/content/webview/PermissionRequest/Application/src/main/java/com/example/android/permissionrequest/ConfirmationDialogFragment.java
@@ -13,12 +13,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package com.example.android.permissionrequest;
 
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.content.DialogInterface;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 import android.support.v4.app.DialogFragment;
 import android.text.TextUtils;
 
@@ -32,7 +34,7 @@
     /**
      * Creates a new instance of ConfirmationDialogFragment.
      *
-     * @param resources The list of resources requested by PermissionRequeste.
+     * @param resources The list of resources requested by PermissionRequest.
      * @return A new instance.
      */
     public static ConfirmationDialogFragment newInstance(String[] resources) {
@@ -43,21 +45,22 @@
         return fragment;
     }
 
+    @NonNull
     @Override
     public Dialog onCreateDialog(Bundle savedInstanceState) {
-        String[] resources = getArguments().getStringArray(ARG_RESOURCES);
+        final String[] resources = getArguments().getStringArray(ARG_RESOURCES);
         return new AlertDialog.Builder(getActivity())
                 .setMessage(getString(R.string.confirmation, TextUtils.join("\n", resources)))
                 .setNegativeButton(R.string.deny, new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int which) {
-                        ((Listener) getParentFragment()).onConfirmation(false);
+                        ((Listener) getParentFragment()).onConfirmation(false, resources);
                     }
                 })
                 .setPositiveButton(R.string.allow, new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int which) {
-                        ((Listener) getParentFragment()).onConfirmation(true);
+                        ((Listener) getParentFragment()).onConfirmation(true, resources);
                     }
                 })
                 .create();
@@ -66,14 +69,15 @@
     /**
      * Callback for the user's response.
      */
-    public interface Listener {
+    interface Listener {
 
         /**
-         * Called when the PermissoinRequest is allowed or denied by the user.
+         * Called when the PermissionRequest is allowed or denied by the user.
          *
-         * @param allowed True if the user allowed the request.
+         * @param allowed   True if the user allowed the request.
+         * @param resources The resources to be granted.
          */
-        public void onConfirmation(boolean allowed);
+        void onConfirmation(boolean allowed, String[] resources);
     }
 
 }
diff --git a/content/webview/PermissionRequest/Application/src/main/java/com/example/android/permissionrequest/MessageDialogFragment.java b/content/webview/PermissionRequest/Application/src/main/java/com/example/android/permissionrequest/MessageDialogFragment.java
new file mode 100644
index 0000000..31d0bcb
--- /dev/null
+++ b/content/webview/PermissionRequest/Application/src/main/java/com/example/android/permissionrequest/MessageDialogFragment.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.permissionrequest;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.StringRes;
+import android.support.v4.app.DialogFragment;
+
+/**
+ * Shows a dialog with a brief message.
+ */
+public class MessageDialogFragment extends DialogFragment {
+
+    private static final String ARG_MESSAGE_RES_ID = "message_res_id";
+
+    public static MessageDialogFragment newInstance(@StringRes int message) {
+        MessageDialogFragment fragment = new MessageDialogFragment();
+        Bundle args = new Bundle();
+        args.putInt(ARG_MESSAGE_RES_ID, message);
+        fragment.setArguments(args);
+        return fragment;
+    }
+
+    @NonNull
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        return new AlertDialog.Builder(getContext())
+                .setMessage(getArguments().getInt(ARG_MESSAGE_RES_ID))
+                .setCancelable(false)
+                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                        ((Listener) getParentFragment()).onOkClicked();
+                    }
+                })
+                .create();
+    }
+
+    interface Listener {
+        void onOkClicked();
+    }
+
+}
diff --git a/content/webview/PermissionRequest/Application/src/main/java/com/example/android/permissionrequest/PermissionRequestFragment.java b/content/webview/PermissionRequest/Application/src/main/java/com/example/android/permissionrequest/PermissionRequestFragment.java
index 44f1d6e..418c90d 100644
--- a/content/webview/PermissionRequest/Application/src/main/java/com/example/android/permissionrequest/PermissionRequestFragment.java
+++ b/content/webview/PermissionRequest/Application/src/main/java/com/example/android/permissionrequest/PermissionRequestFragment.java
@@ -16,12 +16,15 @@
 
 package com.example.android.permissionrequest;
 
+import android.Manifest;
 import android.annotation.SuppressLint;
+import android.content.pm.PackageManager;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v4.app.DialogFragment;
 import android.support.v4.app.Fragment;
+import android.support.v4.content.ContextCompat;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -37,12 +40,14 @@
  * This fragment shows a {@link WebView} and loads a web app from the {@link SimpleWebServer}.
  */
 public class PermissionRequestFragment extends Fragment
-        implements ConfirmationDialogFragment.Listener {
+        implements ConfirmationDialogFragment.Listener, MessageDialogFragment.Listener {
 
     private static final String TAG = PermissionRequestFragment.class.getSimpleName();
 
     private static final String FRAGMENT_DIALOG = "dialog";
 
+    private static final int REQUEST_CAMERA_PERMISSION = 1;
+
     /**
      * We use this web server to serve HTML files in the assets folder. This is because we cannot
      * use the JavaScript method "getUserMedia" from "file:///android_assets/..." URLs.
@@ -67,7 +72,7 @@
 
     @Override
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
-                             @Nullable Bundle savedInstanceState) {
+            @Nullable Bundle savedInstanceState) {
         return inflater.inflate(R.layout.fragment_permission_request, container, false);
     }
 
@@ -85,7 +90,14 @@
         final int port = 8080;
         mWebServer = new SimpleWebServer(port, getResources().getAssets());
         mWebServer.start();
-        mWebView.loadUrl("http://localhost:" + port + "/sample.html");
+        // This is for runtime permission on Marshmallow and above; It is not directly related to
+        // PermissionRequest API.
+        if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA)
+                != PackageManager.PERMISSION_GRANTED) {
+            requestCameraPermission();
+        } else {
+            mWebView.loadUrl("http://localhost:" + port + "/sample.html");
+        }
     }
 
     @Override
@@ -94,6 +106,32 @@
         super.onPause();
     }
 
+    @Override
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
+            @NonNull int[] grantResults) {
+        // This is for runtime permission on Marshmallow and above; It is not directly related to
+        // PermissionRequest API.
+        if (requestCode == REQUEST_CAMERA_PERMISSION) {
+            if (permissions.length != 1 || grantResults.length != 1 ||
+                    grantResults[0] != PackageManager.PERMISSION_GRANTED) {
+                Log.e(TAG, "Camera permission not granted.");
+            } else if (mWebView != null && mWebServer != null) {
+                mWebView.loadUrl("http://localhost:" + mWebServer.getPort() + "/sample.html");
+            }
+        } else {
+            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+        }
+    }
+
+    private void requestCameraPermission() {
+        if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) {
+            MessageDialogFragment.newInstance(R.string.permission_message)
+                    .show(getChildFragmentManager(), FRAGMENT_DIALOG);
+        } else {
+            requestPermissions(new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
+        }
+    }
+
     @SuppressLint("SetJavaScriptEnabled")
     private static void configureWebSettings(WebSettings settings) {
         settings.setJavaScriptEnabled(true);
@@ -110,8 +148,16 @@
         public void onPermissionRequest(PermissionRequest request) {
             Log.i(TAG, "onPermissionRequest");
             mPermissionRequest = request;
-            ConfirmationDialogFragment.newInstance(request.getResources())
-                    .show(getChildFragmentManager(), FRAGMENT_DIALOG);
+            final String[] requestedResources = request.getResources();
+            for (String r : requestedResources) {
+                if (r.equals(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) {
+                    // In this sample, we only accept video capture request.
+                    ConfirmationDialogFragment
+                            .newInstance(new String[]{PermissionRequest.RESOURCE_VIDEO_CAPTURE})
+                            .show(getChildFragmentManager(), FRAGMENT_DIALOG);
+                    break;
+                }
+            }
         }
 
         // This method is called when the permission request is canceled by the web content.
@@ -155,9 +201,14 @@
     };
 
     @Override
-    public void onConfirmation(boolean allowed) {
+    public void onOkClicked() {
+        requestPermissions(new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
+    }
+
+    @Override
+    public void onConfirmation(boolean allowed, String[] resources) {
         if (allowed) {
-            mPermissionRequest.grant(mPermissionRequest.getResources());
+            mPermissionRequest.grant(resources);
             Log.d(TAG, "Permission granted.");
         } else {
             mPermissionRequest.deny();
@@ -174,7 +225,7 @@
      * For testing.
      */
     public interface ConsoleMonitor {
-        public void onConsoleMessage(ConsoleMessage message);
+        void onConsoleMessage(ConsoleMessage message);
     }
 
 }
diff --git a/content/webview/PermissionRequest/Application/src/main/java/com/example/android/permissionrequest/SimpleWebServer.java b/content/webview/PermissionRequest/Application/src/main/java/com/example/android/permissionrequest/SimpleWebServer.java
index 36b7c46..b02275a 100644
--- a/content/webview/PermissionRequest/Application/src/main/java/com/example/android/permissionrequest/SimpleWebServer.java
+++ b/content/webview/PermissionRequest/Application/src/main/java/com/example/android/permissionrequest/SimpleWebServer.java
@@ -90,6 +90,10 @@
         }
     }
 
+    public int getPort() {
+        return mPort;
+    }
+
     @Override
     public void run() {
         try {
diff --git a/content/webview/PermissionRequest/Application/src/main/res/values/strings.xml b/content/webview/PermissionRequest/Application/src/main/res/values/strings.xml
index c3e5574..2488766 100644
--- a/content/webview/PermissionRequest/Application/src/main/res/values/strings.xml
+++ b/content/webview/PermissionRequest/Application/src/main/res/values/strings.xml
@@ -15,6 +15,7 @@
  limitations under the License.
 -->
 <resources>
+    <string name="permission_message">This sample app uses camera.</string>
     <string name="confirmation">This web page wants to use following resources:\n\n%s</string>
     <string name="allow">Allow</string>
     <string name="deny">Deny</string>
diff --git a/security/FingerprintDialog/Application/src/main/AndroidManifest.xml b/security/FingerprintDialog/Application/src/main/AndroidManifest.xml
index 77d9949..337f641 100644
--- a/security/FingerprintDialog/Application/src/main/AndroidManifest.xml
+++ b/security/FingerprintDialog/Application/src/main/AndroidManifest.xml
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+<?xml version="1.0" encoding="UTF-8"?><!--
  Copyright 2015 The Android Open Source Project
 
  Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,24 +13,28 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="com.example.android.fingerprintdialog"
-          android:versionCode="1"
-          android:versionName="1.0">
+<manifest package="com.example.android.fingerprintdialog"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:versionCode="1"
+    android:versionName="1.0">
 
-    <uses-permission android:name="android.permission.USE_FINGERPRINT"/>
+    <uses-permission android:name="android.permission.USE_FINGERPRINT" />
 
     <application
-            android:allowBackup="true"
-            android:label="@string/application_name"
-            android:icon="@mipmap/ic_launcher"
-            android:theme="@style/Theme.AppCompat.Light">
+        android:allowBackup="true"
+        android:icon="@mipmap/ic_launcher"
+        android:label="@string/application_name"
+        android:supportsRtl="true"
+        android:theme="@style/Theme.AppCompat.Light"
+        tools:ignore="GoogleAppIndexingWarning">
 
-        <activity android:name=".MainActivity"
-                  android:label="@string/application_name">
+        <activity
+            android:name=".MainActivity"
+            android:label="@string/application_name">
             <intent-filter>
-                <action android:name="android.intent.action.MAIN"/>
-                <category android:name="android.intent.category.LAUNCHER"/>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
 
diff --git a/security/FingerprintDialog/Application/src/main/java/com/example/android/fingerprintdialog/FingerprintAuthenticationDialogFragment.java b/security/FingerprintDialog/Application/src/main/java/com/example/android/fingerprintdialog/FingerprintAuthenticationDialogFragment.java
index 0537573..9f4a684 100644
--- a/security/FingerprintDialog/Application/src/main/java/com/example/android/fingerprintdialog/FingerprintAuthenticationDialogFragment.java
+++ b/security/FingerprintDialog/Application/src/main/java/com/example/android/fingerprintdialog/FingerprintAuthenticationDialogFragment.java
@@ -16,8 +16,8 @@
 
 package com.example.android.fingerprintdialog;
 
-import android.app.Activity;
 import android.app.DialogFragment;
+import android.content.Context;
 import android.content.SharedPreferences;
 import android.hardware.fingerprint.FingerprintManager;
 import android.os.Bundle;
@@ -134,11 +134,11 @@
     }
 
     @Override
-    public void onAttach(Activity activity) {
-        super.onAttach(activity);
-        mActivity = (MainActivity) activity;
-        mInputMethodManager = mActivity.getSystemService(InputMethodManager.class);
-        mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(mActivity);
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        mActivity = (MainActivity) getActivity();
+        mInputMethodManager = context.getSystemService(InputMethodManager.class);
+        mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
     }
 
     /**
diff --git a/security/FingerprintDialog/Application/src/main/res/layout/activity_main.xml b/security/FingerprintDialog/Application/src/main/res/layout/activity_main.xml
index 075899f..f0a596f 100644
--- a/security/FingerprintDialog/Application/src/main/res/layout/activity_main.xml
+++ b/security/FingerprintDialog/Application/src/main/res/layout/activity_main.xml
@@ -31,7 +31,8 @@
                 android:layout_marginBottom="32dp"
                 android:layout_gravity="center_horizontal"
                 android:scaleType="fitCenter"
-                android:src="@drawable/android_robot"/>
+                android:src="@drawable/android_robot"
+                android:contentDescription="@string/description_bugdroid_icon"/>
 
         <LinearLayout
                 android:layout_width="match_parent"
diff --git a/security/FingerprintDialog/Application/src/main/res/layout/fingerprint_dialog_content.xml b/security/FingerprintDialog/Application/src/main/res/layout/fingerprint_dialog_content.xml
index 3929eba..5bb65b2 100644
--- a/security/FingerprintDialog/Application/src/main/res/layout/fingerprint_dialog_content.xml
+++ b/security/FingerprintDialog/Application/src/main/res/layout/fingerprint_dialog_content.xml
@@ -41,7 +41,8 @@
         android:layout_alignParentStart="true"
         android:layout_below="@+id/fingerprint_description"
         android:layout_marginTop="20dp"
-        android:src="@drawable/ic_fp_40px" />
+        android:src="@drawable/ic_fp_40px"
+        android:contentDescription="@string/description_fingerprint_icon"/>
 
     <TextView
         android:id="@+id/fingerprint_status"
diff --git a/security/FingerprintDialog/Application/src/main/res/menu/menu_main.xml b/security/FingerprintDialog/Application/src/main/res/menu/menu_main.xml
index 73f5e89..6a6ba0f 100644
--- a/security/FingerprintDialog/Application/src/main/res/menu/menu_main.xml
+++ b/security/FingerprintDialog/Application/src/main/res/menu/menu_main.xml
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Copyright (C) 2015 The Android Open Source Project
   ~
   ~ Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,7 +14,12 @@
   ~ limitations under the License
   -->
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
-    <item android:id="@+id/action_settings" android:title="@string/action_settings"
-        android:orderInCategory="100" android:showAsAction="never" />
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:context=".MainActivity">
+    <item
+        android:id="@+id/action_settings"
+        android:orderInCategory="100"
+        android:title="@string/action_settings"
+        app:showAsAction="never" />
 </menu>
diff --git a/security/FingerprintDialog/Application/src/main/res/values/strings.xml b/security/FingerprintDialog/Application/src/main/res/values/strings.xml
index 86f200c..b085606 100644
--- a/security/FingerprintDialog/Application/src/main/res/values/strings.xml
+++ b/security/FingerprintDialog/Application/src/main/res/values/strings.xml
@@ -25,7 +25,7 @@
     <string name="cancel">Cancel</string>
     <string name="use_password">Use password</string>
     <string name="sign_in">Sign in</string>
-    <string name="ok">Ok</string>
+    <string name="ok">OK</string>
     <string name="password">Password</string>
     <string name="fingerprint_description">Confirm fingerprint to continue</string>
     <string name="fingerprint_hint">Touch sensor</string>
@@ -45,4 +45,6 @@
     <string name="use_fingerprint_in_future">Use fingerprint in the future</string>
     <string name="use_fingerprint_to_authenticate_title">Use fingerprint to authenticate</string>
     <string name="use_fingerprint_to_authenticate_key" >use_fingerprint_to_authenticate_key</string>
+    <string name="description_bugdroid_icon">Android bugdroid image</string>
+    <string name="description_fingerprint_icon">Fingerprint icon</string>
 </resources>
diff --git a/wearable/wear/WearVerifyRemoteApp/Application/src/main/java/com/example/android/wearable/wear/wearverifyremoteapp/MainMobileActivity.java b/wearable/wear/WearVerifyRemoteApp/Application/src/main/java/com/example/android/wearable/wear/wearverifyremoteapp/MainMobileActivity.java
index 0d06ed5..ed15119 100644
--- a/wearable/wear/WearVerifyRemoteApp/Application/src/main/java/com/example/android/wearable/wear/wearverifyremoteapp/MainMobileActivity.java
+++ b/wearable/wear/WearVerifyRemoteApp/Application/src/main/java/com/example/android/wearable/wear/wearverifyremoteapp/MainMobileActivity.java
@@ -99,15 +99,16 @@
             if (resultCode == RemoteIntent.RESULT_OK) {
                 Toast toast = Toast.makeText(
                         getApplicationContext(),
-                        "Successfully sent to device",
+                        "Play Store Request to Wear device successful.",
                         Toast.LENGTH_SHORT);
                 toast.show();
 
             } else if (resultCode == RemoteIntent.RESULT_FAILED) {
                 Toast toast = Toast.makeText(
                         getApplicationContext(),
-                        "Failed to send to device.",
-                        Toast.LENGTH_SHORT);
+                        "Play Store Request Failed. Wear device(s) may not support Play Store, "
+                                + " that is, the Wear device may be version 1.0.",
+                        Toast.LENGTH_LONG);
                 toast.show();
 
             } else {
@@ -188,7 +189,7 @@
         // Initial request for devices with our capability, aka, our Wear app installed.
         findWearDevicesWithApp();
 
-        // Initial request for devices all Wear devices connected (with or without our capability).
+        // Initial request for all Wear devices connected (with or without our capability).
         // Additional Note: Because there isn't a listener for ALL Nodes added/removed from network
         // that isn't deprecated, we simply update the full list when the Google API Client is
         // connected and when capability changes come through in the onCapabilityChanged() method.
diff --git a/wearable/wear/WearVerifyRemoteApp/Wearable/src/main/java/com/example/android/wearable/wear/wearverifyremoteapp/MainWearActivity.java b/wearable/wear/WearVerifyRemoteApp/Wearable/src/main/java/com/example/android/wearable/wear/wearverifyremoteapp/MainWearActivity.java
index 260ed44..31882b0 100644
--- a/wearable/wear/WearVerifyRemoteApp/Wearable/src/main/java/com/example/android/wearable/wear/wearverifyremoteapp/MainWearActivity.java
+++ b/wearable/wear/WearVerifyRemoteApp/Wearable/src/main/java/com/example/android/wearable/wear/wearverifyremoteapp/MainWearActivity.java
@@ -72,12 +72,15 @@
     // IMPORTANT NOTE: This should be named differently than your Wear app's capability.
     private static final String CAPABILITY_PHONE_APP = "verify_remote_example_phone_app";
 
-
-    // Links to mobile app for Android (Play Store).
+    // Links to install mobile app for both Android (Play Store) and iOS.
     // TODO: Replace with your links/packages.
     private static final String PLAY_STORE_APP_URI =
             "market://details?id=com.example.android.wearable.wear.wearverifyremoteapp";
 
+    // TODO: Replace with your links/packages.
+    private static final String APP_STORE_APP_URI =
+            "https://itunes.apple.com/us/app/android-wear/id986496028?mt=8";
+
     // Result from sending RemoteIntent to phone to open app in play/app store.
     private final ResultReceiver mResultReceiver = new ResultReceiver(new Handler()) {
         @Override
@@ -263,6 +266,17 @@
             // Assume iPhone (iOS device) or Android without Play Store (not supported right now).
             case PlayStoreAvailability.PLAY_STORE_ON_PHONE_UNAVAILABLE:
                 Log.d(TAG, "\tPLAY_STORE_ON_PHONE_UNAVAILABLE");
+
+                // Create Remote Intent to open App Store listing of app on iPhone.
+                Intent intentIOS =
+                        new Intent(Intent.ACTION_VIEW)
+                                .addCategory(Intent.CATEGORY_BROWSABLE)
+                                .setData(Uri.parse(APP_STORE_APP_URI));
+
+                RemoteIntent.startRemoteActivity(
+                        getApplicationContext(),
+                        intentIOS,
+                        mResultReceiver);
                 break;
 
             case PlayStoreAvailability.PLAY_STORE_ON_PHONE_ERROR_UNKNOWN:
diff --git a/wearable/wear/XYZTouristAttractions/template-params.xml b/wearable/wear/XYZTouristAttractions/template-params.xml
index 35de838..bf2a37d 100644
--- a/wearable/wear/XYZTouristAttractions/template-params.xml
+++ b/wearable/wear/XYZTouristAttractions/template-params.xml
@@ -27,17 +27,20 @@
     </wearable>
 
     <dependency>com.google.android.gms:play-services-location</dependency>
+
     <dependency>com.google.maps.android:android-maps-utils:0.3.4</dependency>
     <dependency>com.github.bumptech.glide:glide:3.6.1</dependency>
     <dependency>com.android.support:appcompat-v7:24.0.0</dependency>
     <dependency>com.android.support:recyclerview-v7:24.0.0</dependency>
     <dependency>com.android.support:design:24.0.0</dependency>
-    <dependency_wearable>com.google.android.gms:play-services-location</dependency_wearable>
+    <dependency_wearable>com.google.android.gms:play-services-maps</dependency_wearable>
     <dependency_shared>com.android.support:support-v13:23.0.0</dependency_shared>
     <dependency_shared>com.google.android.gms:play-services-wearable</dependency_shared>
-    <dependency_shared>com.google.android.gms:play-services-location</dependency_shared>
+    <dependency_shared>com.google.android.gms:play-services-maps</dependency_shared>
     <dependency_shared>com.google.maps.android:android-maps-utils:0.3.4</dependency_shared>
 
+
+
     <strings>
         <intro>
 <![CDATA[