Phone side to verify if app is install on wear devices. If not, opens
up play store on those wear devices.

Bug: 32581245
Change-Id: I7f42839f8620da9b0b61737057a10a736d62d73b
diff --git a/wearable/wear/WearVerifyRemoteApp/Application/.gitignore b/wearable/wear/WearVerifyRemoteApp/Application/.gitignore
new file mode 100644
index 0000000..6eb878d
--- /dev/null
+++ b/wearable/wear/WearVerifyRemoteApp/Application/.gitignore
@@ -0,0 +1,16 @@
+# Copyright 2013 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.
+src/template/
+src/common/
+build.gradle
diff --git a/wearable/wear/WearVerifyRemoteApp/Application/proguard-project.txt b/wearable/wear/WearVerifyRemoteApp/Application/proguard-project.txt
new file mode 100644
index 0000000..f2fe155
--- /dev/null
+++ b/wearable/wear/WearVerifyRemoteApp/Application/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
diff --git a/wearable/wear/WearVerifyRemoteApp/Application/src/main/AndroidManifest.xml b/wearable/wear/WearVerifyRemoteApp/Application/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..bb5ea72
--- /dev/null
+++ b/wearable/wear/WearVerifyRemoteApp/Application/src/main/AndroidManifest.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2016 Google Inc.
+  ~
+  ~ 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.
+  -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.android.wearable.wear.wearverifyremoteapp"
+    android:versionCode="1"
+    android:versionName="1.0">
+
+    <application android:allowBackup="true"
+        android:label="@string/app_name"
+        android:icon="@mipmap/ic_launcher"
+        android:theme="@style/AppTheme">
+
+        <activity android:name=".MainMobileActivity">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+
+    </application>
+</manifest>
\ No newline at end of file
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
new file mode 100644
index 0000000..0d06ed5
--- /dev/null
+++ b/wearable/wear/WearVerifyRemoteApp/Application/src/main/java/com/example/android/wearable/wear/wearverifyremoteapp/MainMobileActivity.java
@@ -0,0 +1,340 @@
+/*
+ * Copyright (C) 2016 Google Inc. All Rights Reserved.
+ *
+ * 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.wearable.wear.wearverifyremoteapp;
+
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.ResultReceiver;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v7.app.AppCompatActivity;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.google.android.gms.common.ConnectionResult;
+import com.google.android.gms.common.api.GoogleApiClient;
+import com.google.android.gms.common.api.PendingResult;
+import com.google.android.gms.common.api.ResultCallback;
+import com.google.android.gms.wearable.CapabilityApi;
+import com.google.android.gms.wearable.CapabilityInfo;
+import com.google.android.gms.wearable.Node;
+import com.google.android.gms.wearable.NodeApi;
+import com.google.android.gms.wearable.Wearable;
+import com.google.android.wearable.intent.RemoteIntent;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Checks if the sample's Wear app is installed on remote Wear device(s). If it is not, allows the
+ * user to open the app listing on the Wear devices' Play Store.
+ */
+public class MainMobileActivity extends AppCompatActivity implements
+        GoogleApiClient.ConnectionCallbacks,
+        GoogleApiClient.OnConnectionFailedListener,
+        CapabilityApi.CapabilityListener {
+
+    private static final String TAG = "MainMobileActivity";
+
+    private static final String WELCOME_MESSAGE = "Welcome to our Mobile app!\n\n";
+
+    private static final String CHECKING_MESSAGE =
+            WELCOME_MESSAGE + "Checking for Wear Devices for app...\n";
+
+    private static final String NO_DEVICES =
+            WELCOME_MESSAGE
+                    + "You have no Wear devices linked to your phone at this time.\n";
+
+    private static final String MISSING_ALL_MESSAGE =
+            WELCOME_MESSAGE
+                    + "You are missing the Wear app on all your Wear Devices, please click on the "
+                    + "button below to install it on those device(s).\n";
+
+    private static final String INSTALLED_SOME_DEVICES_MESSAGE =
+            WELCOME_MESSAGE
+                    + "Wear app installed on some your device(s) (%s)!\n\nYou can now use the "
+                    + "MessageApi, DataApi, etc.\n\n"
+                    + "To install the Wear app on the other devices, please click on the button "
+                    + "below.\n";
+
+    private static final String INSTALLED_ALL_DEVICES_MESSAGE =
+            WELCOME_MESSAGE
+                    + "Wear app installed on all your devices (%s)!\n\nYou can now use the "
+                    + "MessageApi, DataApi, etc.";
+
+    // Name of capability listed in Wear app's wear.xml.
+    // IMPORTANT NOTE: This should be named differently than your Phone app's capability.
+    private static final String CAPABILITY_WEAR_APP = "verify_remote_example_wear_app";
+
+    // Links to Wear app (Play Store).
+    // TODO: Replace with your links/packages.
+    private static final String PLAY_STORE_APP_URI =
+            "market://details?id=com.example.android.wearable.wear.wearverifyremoteapp";
+
+    // Result from sending RemoteIntent to wear device(s) to open app in play/app store.
+    private final ResultReceiver mResultReceiver = new ResultReceiver(new Handler()) {
+        @Override
+        protected void onReceiveResult(int resultCode, Bundle resultData) {
+            Log.d(TAG, "onReceiveResult: " + resultCode);
+
+            if (resultCode == RemoteIntent.RESULT_OK) {
+                Toast toast = Toast.makeText(
+                        getApplicationContext(),
+                        "Successfully sent to device",
+                        Toast.LENGTH_SHORT);
+                toast.show();
+
+            } else if (resultCode == RemoteIntent.RESULT_FAILED) {
+                Toast toast = Toast.makeText(
+                        getApplicationContext(),
+                        "Failed to send to device.",
+                        Toast.LENGTH_SHORT);
+                toast.show();
+
+            } else {
+                throw new IllegalStateException("Unexpected result " + resultCode);
+            }
+        }
+    };
+
+    private TextView mInformationTextView;
+    private Button mRemoteOpenButton;
+
+    private Set<Node> mWearNodesWithApp;
+    private List<Node> mAllConnectedNodes;
+
+    private GoogleApiClient mGoogleApiClient;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        Log.d(TAG, "onCreate()");
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+
+        mInformationTextView = (TextView) findViewById(R.id.information_text_view);
+        mRemoteOpenButton = (Button) findViewById(R.id.remote_open_button);
+
+        mInformationTextView.setText(CHECKING_MESSAGE);
+
+        mRemoteOpenButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                openPlayStoreOnWearDevicesWithoutApp();
+            }
+        });
+
+        mGoogleApiClient = new GoogleApiClient.Builder(this)
+                .addApi(Wearable.API)
+                .addConnectionCallbacks(this)
+                .addOnConnectionFailedListener(this)
+                .build();
+    }
+
+
+    @Override
+    protected void onPause() {
+        Log.d(TAG, "onPause()");
+        super.onPause();
+
+        if ((mGoogleApiClient != null) && mGoogleApiClient.isConnected()) {
+
+            Wearable.CapabilityApi.removeCapabilityListener(
+                    mGoogleApiClient,
+                    this,
+                    CAPABILITY_WEAR_APP);
+
+            mGoogleApiClient.disconnect();
+        }
+    }
+
+    @Override
+    protected void onResume() {
+        Log.d(TAG, "onResume()");
+        super.onResume();
+        if (mGoogleApiClient != null) {
+            mGoogleApiClient.connect();
+        }
+    }
+
+    @Override
+    public void onConnected(@Nullable Bundle bundle) {
+        Log.d(TAG, "onConnected()");
+
+        // Set up listeners for capability changes (install/uninstall of remote app).
+        Wearable.CapabilityApi.addCapabilityListener(
+                mGoogleApiClient,
+                this,
+                CAPABILITY_WEAR_APP);
+
+        // 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).
+        // 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.
+        findAllWearDevices();
+    }
+
+    @Override
+    public void onConnectionSuspended(int i) {
+        Log.d(TAG, "onConnectionSuspended(): connection to location client suspended: " + i);
+    }
+
+    @Override
+    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
+        Log.e(TAG, "onConnectionFailed(): " + connectionResult);
+    }
+
+    /*
+     * Updates UI when capabilities change (install/uninstall wear app).
+     */
+    public void onCapabilityChanged(CapabilityInfo capabilityInfo) {
+        Log.d(TAG, "onCapabilityChanged(): " + capabilityInfo);
+
+        mWearNodesWithApp = capabilityInfo.getNodes();
+
+        // Because we have an updated list of devices with/without our app, we need to also update
+        // our list of active Wear devices.
+        findAllWearDevices();
+
+        verifyNodeAndUpdateUI();
+    }
+
+    private void findWearDevicesWithApp() {
+        Log.d(TAG, "findWearDevicesWithApp()");
+
+        // You can filter this by FILTER_REACHABLE if you only want to open Nodes (Wear Devices)
+        // directly connect to your phone.
+        PendingResult<CapabilityApi.GetCapabilityResult> pendingResult =
+                Wearable.CapabilityApi.getCapability(
+                        mGoogleApiClient,
+                        CAPABILITY_WEAR_APP,
+                        CapabilityApi.FILTER_ALL);
+
+        pendingResult.setResultCallback(new ResultCallback<CapabilityApi.GetCapabilityResult>() {
+            @Override
+            public void onResult(@NonNull CapabilityApi.GetCapabilityResult getCapabilityResult) {
+                Log.d(TAG, "onResult(): " + getCapabilityResult);
+
+                if (getCapabilityResult.getStatus().isSuccess()) {
+                    CapabilityInfo capabilityInfo = getCapabilityResult.getCapability();
+                    mWearNodesWithApp = capabilityInfo.getNodes();
+                    verifyNodeAndUpdateUI();
+
+                } else {
+                    Log.d(TAG, "Failed CapabilityApi: " + getCapabilityResult.getStatus());
+                }
+            }
+        });
+    }
+
+    private void findAllWearDevices() {
+        Log.d(TAG, "findAllWearDevices()");
+
+        PendingResult<NodeApi.GetConnectedNodesResult> pendingResult =
+                Wearable.NodeApi.getConnectedNodes(mGoogleApiClient);
+
+        pendingResult.setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() {
+            @Override
+            public void onResult(@NonNull NodeApi.GetConnectedNodesResult getConnectedNodesResult) {
+
+                if (getConnectedNodesResult.getStatus().isSuccess()) {
+                    mAllConnectedNodes = getConnectedNodesResult.getNodes();
+                    verifyNodeAndUpdateUI();
+
+                } else {
+                    Log.d(TAG, "Failed CapabilityApi: " + getConnectedNodesResult.getStatus());
+                }
+            }
+        });
+    }
+
+    private void verifyNodeAndUpdateUI() {
+        Log.d(TAG, "verifyNodeAndUpdateUI()");
+
+        if ((mWearNodesWithApp == null) || (mAllConnectedNodes == null)) {
+            Log.d(TAG, "Waiting on Results for both connected nodes and nodes with app");
+
+        } else if (mAllConnectedNodes.isEmpty()) {
+            Log.d(TAG, NO_DEVICES);
+            mInformationTextView.setText(NO_DEVICES);
+            mRemoteOpenButton.setVisibility(View.INVISIBLE);
+
+        } else if (mWearNodesWithApp.isEmpty()) {
+            Log.d(TAG, MISSING_ALL_MESSAGE);
+            mInformationTextView.setText(MISSING_ALL_MESSAGE);
+            mRemoteOpenButton.setVisibility(View.VISIBLE);
+
+        } else if (mWearNodesWithApp.size() < mAllConnectedNodes.size()) {
+            // TODO: Add your code to communicate with the wear app(s) via
+            // Wear APIs (MessageApi, DataApi, etc.)
+
+            String installMessage =
+                    String.format(INSTALLED_SOME_DEVICES_MESSAGE, mWearNodesWithApp);
+            Log.d(TAG, installMessage);
+            mInformationTextView.setText(installMessage);
+            mRemoteOpenButton.setVisibility(View.VISIBLE);
+
+        } else {
+            // TODO: Add your code to communicate with the wear app(s) via
+            // Wear APIs (MessageApi, DataApi, etc.)
+
+            String installMessage =
+                    String.format(INSTALLED_ALL_DEVICES_MESSAGE, mWearNodesWithApp);
+            Log.d(TAG, installMessage);
+            mInformationTextView.setText(installMessage);
+            mRemoteOpenButton.setVisibility(View.INVISIBLE);
+
+        }
+    }
+
+    private void openPlayStoreOnWearDevicesWithoutApp() {
+        Log.d(TAG, "openPlayStoreOnWearDevicesWithoutApp()");
+
+        // Create a List of Nodes (Wear devices) without your app.
+        ArrayList<Node> nodesWithoutApp = new ArrayList<>();
+
+        for (Node node : mAllConnectedNodes) {
+            if (!mWearNodesWithApp.contains(node)) {
+                nodesWithoutApp.add(node);
+            }
+        }
+
+        if (!nodesWithoutApp.isEmpty()) {
+            Log.d(TAG, "Number of nodes without app: " + nodesWithoutApp.size());
+
+            Intent intent =
+                    new Intent(Intent.ACTION_VIEW)
+                            .addCategory(Intent.CATEGORY_BROWSABLE)
+                            .setData(Uri.parse(PLAY_STORE_APP_URI));
+
+            for (Node node : nodesWithoutApp) {
+                RemoteIntent.startRemoteActivity(
+                        getApplicationContext(),
+                        intent,
+                        mResultReceiver,
+                        node.getId());
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/layout/activity_main.xml b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..d189f84
--- /dev/null
+++ b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/layout/activity_main.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2016 Google Inc.
+  ~
+  ~ 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.
+  -->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingBottom="@dimen/activity_vertical_margin"
+    android:paddingLeft="@dimen/activity_horizontal_margin"
+    android:paddingRight="@dimen/activity_horizontal_margin"
+    android:paddingTop="@dimen/activity_vertical_margin"
+    android:orientation="vertical"
+    tools:context="com.example.android.wearable.wear.wearverifyremoteapp.MainMobileActivity">
+
+    <TextView
+        android:id="@+id/information_text_view"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="5"/>
+
+    <Button
+        android:id="@+id/remote_open_button"
+        android:layout_width="match_parent"
+        android:text="Install App on Wear device(s)"
+        android:layout_height="0dp"
+        android:layout_weight="1"
+        android:visibility="invisible"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/mipmap-hdpi/ic_launcher.png b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..cde69bc
--- /dev/null
+++ b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/mipmap-mdpi/ic_launcher.png b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c133a0c
--- /dev/null
+++ b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/mipmap-xhdpi/ic_launcher.png b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..bfa42f0
--- /dev/null
+++ b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..324e72c
--- /dev/null
+++ b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..aee44e1
--- /dev/null
+++ b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/values/colors.xml b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/values/colors.xml
new file mode 100644
index 0000000..e1632c5
--- /dev/null
+++ b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/values/colors.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2016 Google Inc.
+  ~
+  ~ 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.
+  -->
+<resources>
+    <color name="colorPrimary">#3F51B5</color>
+    <color name="colorPrimaryDark">#303F9F</color>
+    <color name="colorAccent">#FF4081</color>
+</resources>
diff --git a/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/values/dimens.xml b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..bc0615c
--- /dev/null
+++ b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/values/dimens.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2016 Google Inc.
+  ~
+  ~ 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.
+  -->
+<resources>
+    <!-- Default screen margins, per the Android Design guidelines. -->
+    <dimen name="activity_horizontal_margin">16dp</dimen>
+    <dimen name="activity_vertical_margin">16dp</dimen>
+</resources>
diff --git a/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/values/strings.xml b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/values/strings.xml
new file mode 100644
index 0000000..3dd74fd
--- /dev/null
+++ b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/values/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2016 Google Inc.
+  ~
+  ~ 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.
+  -->
+<resources>
+    <string name="app_name">Phone Verify Remote App</string>
+</resources>
\ No newline at end of file
diff --git a/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/values/styles.xml b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/values/styles.xml
new file mode 100644
index 0000000..3745bec
--- /dev/null
+++ b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/values/styles.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2016 Google Inc.
+  ~
+  ~ 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.
+  -->
+<resources>
+
+    <!-- Base application theme. -->
+    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
+        <!-- Customize your theme here. -->
+        <item name="colorPrimary">@color/colorPrimary</item>
+        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
+        <item name="colorAccent">@color/colorAccent</item>
+    </style>
+
+</resources>
diff --git a/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/values/wear.xml b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/values/wear.xml
new file mode 100644
index 0000000..bcaf684
--- /dev/null
+++ b/wearable/wear/WearVerifyRemoteApp/Application/src/main/res/values/wear.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2016 Google Inc.
+  ~
+  ~ 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.
+  -->
+<resources>
+    <string-array name="android_wear_capabilities">
+        <!-- IMPORTANT NOTE: Should be different than capability in Wear res/values/wear.xml. -->
+        <item>verify_remote_example_phone_app</item>
+    </string-array>
+</resources>
\ No newline at end of file