Adds Notification Style examples for apps that want to support
phones/tablets and wear in addition to learning the styles.

Change-Id: Ie00189288c8d4e2a772664559a648da083d95449
diff --git a/wearable/wear/WearDrawers/Wearable/src/main/AndroidManifest.xml b/wearable/wear/WearDrawers/Wearable/src/main/AndroidManifest.xml
index 3044d19..eaf9dbd 100644
--- a/wearable/wear/WearDrawers/Wearable/src/main/AndroidManifest.xml
+++ b/wearable/wear/WearDrawers/Wearable/src/main/AndroidManifest.xml
@@ -21,7 +21,6 @@
             android:label="@string/app_name">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>
-
                 <category android:name="android.intent.category.LAUNCHER"/>
             </intent-filter>
         </activity>
diff --git a/wearable/wear/WearNotifications/.gitignore b/wearable/wear/WearNotifications/.gitignore
new file mode 100644
index 0000000..b90e756
--- /dev/null
+++ b/wearable/wear/WearNotifications/.gitignore
@@ -0,0 +1,33 @@
+# built application files
+*.apk
+*.ap_
+
+# files for the dex VM
+*.dex
+
+# Java class files
+*.class
+
+# generated files
+bin/
+gen/
+
+# Ignore gradle files
+.gradle/
+build/
+
+# Local configuration file (sdk path, etc)
+local.properties
+
+# Proguard folder generated by Eclipse
+proguard/
+proguard-project.txt
+
+# Eclipse files
+.project
+.classpath
+.settings/
+
+# Android Studio/IDEA
+*.iml
+.idea
diff --git a/wearable/wear/WearNotifications/Application/.gitignore b/wearable/wear/WearNotifications/Application/.gitignore
new file mode 100644
index 0000000..6eb878d
--- /dev/null
+++ b/wearable/wear/WearNotifications/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/WearNotifications/Application/src/main/AndroidManifest.xml b/wearable/wear/WearNotifications/Application/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..28093e5
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/AndroidManifest.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.android.wearable.wear.wearnotifications"
+    android:versionCode="1"
+    android:versionName="1.0">
+    <!-- android:icon="@mipmap/ic_launcher" -->
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:supportsRtl="true"
+        android:theme="@style/AppTheme">
+
+        <activity android:name=".MainActivity">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+
+        <activity
+            android:name=".handlers.BigTextMainActivity"
+            android:excludeFromRecents="true"
+            android:label="@string/title_activity_big_text_main"
+            android:taskAffinity="">
+        </activity>
+
+        <activity
+            android:name=".handlers.BigPictureSocialMainActivity"
+            android:label="@string/title_activity_big_picture_main">
+            <meta-data
+                android:name="android.support.PARENT_ACTIVITY"
+                android:value=".MainActivity"/>
+        </activity>
+
+
+        <activity
+            android:name=".handlers.InboxMainActivity"
+            android:label="@string/title_activity_inbox_main">
+            <meta-data
+                android:name="android.support.PARENT_ACTIVITY"
+                android:value=".MainActivity"/>
+        </activity>
+
+        <activity
+            android:name=".handlers.MessagingMainActivity"
+            android:label="@string/title_activity_messaging_main">
+            <meta-data
+                android:name="android.support.PARENT_ACTIVITY"
+                android:value=".MainActivity"/>
+        </activity>
+
+        <service
+            android:name=".handlers.BigTextIntentService"
+            android:exported="false">
+        </service>
+        <service
+            android:name=".handlers.MessagingIntentService"
+            android:exported="false">
+        </service>
+        <service
+            android:name=".handlers.BigPictureSocialIntentService"
+            android:exported="false">
+        </service>
+    </application>
+</manifest>
\ No newline at end of file
diff --git a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/GlobalNotificationBuilder.java b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/GlobalNotificationBuilder.java
new file mode 100644
index 0000000..1b1743f
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/GlobalNotificationBuilder.java
@@ -0,0 +1,60 @@
+/*
+Copyright 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.wearable.wear.wearnotifications;
+
+import android.support.v7.app.NotificationCompat;
+
+/**
+ * We use a Singleton for a global copy of the NotificationCompat.Builder to update active
+ * Notifications from other Services/Activities.
+ *
+ * You have two options for updating your notifications:
+ *
+ *  1. Use a new NotificationCompatBuilder to create the Notification. This approach requires you
+ *  to get *ALL* the information and pass it to the builder. We get all the information from a Mock
+ *  Database and this is the approach used in the MainActivity.
+ *
+ *  2. Use an existing NotificationCompatBuilder to create a Notification. This approach requires
+ *  you to store a reference to the original builder. The benefit is you only need the new/updated
+ *  information for an existing notification. We use this approach in the IntentService handlers to
+ *  update existing notifications.
+ *
+ *  IMPORTANT NOTE 1: You shouldn't save/modify the resulting Notification object using
+ *  its member variables and/or legacy APIs. If you want to retain anything from update
+ *  to update, retain the Builder as option 2 outlines.
+ *
+ *  IMPORTANT NOTE 2: If the global Notification Builder is lost because the process is killed, you
+ *  should have a way to recreate the Notification Builder from a persistent state. (We do this as
+ *  well in the sample, check the IntentServices.)
+ */
+public final class GlobalNotificationBuilder {
+
+    private static NotificationCompat.Builder sGlobalNotificationCompatBuilder = null;
+
+    /*
+     * Empty constructor - We don't initialize builder because we rely on a null state to let us
+     * know the Application's process was killed.
+     */
+    private GlobalNotificationBuilder () { }
+
+    public static void setNotificationCompatBuilderInstance (NotificationCompat.Builder builder) {
+        sGlobalNotificationCompatBuilder = builder;
+    }
+
+    public static NotificationCompat.Builder getNotificationCompatBuilderInstance(){
+        return sGlobalNotificationCompatBuilder;
+    }
+}
\ No newline at end of file
diff --git a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/MainActivity.java b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/MainActivity.java
new file mode 100644
index 0000000..001f03c
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/MainActivity.java
@@ -0,0 +1,827 @@
+/*
+Copyright 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.wearable.wear.wearnotifications;
+
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.graphics.BitmapFactory;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.design.widget.Snackbar;
+import android.support.v4.app.NotificationCompat.BigPictureStyle;
+import android.support.v4.app.NotificationCompat.BigTextStyle;
+import android.support.v4.app.NotificationCompat.MessagingStyle;
+import android.support.v4.app.NotificationManagerCompat;
+import android.support.v4.app.RemoteInput;
+import android.support.v4.app.TaskStackBuilder;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.app.NotificationCompat;
+import android.util.Log;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.RelativeLayout;
+import android.widget.Spinner;
+import android.widget.TextView;
+
+
+
+import com.example.android.wearable.wear.wearnotifications.handlers.BigPictureSocialIntentService;
+import com.example.android.wearable.wear.wearnotifications.handlers.BigPictureSocialMainActivity;
+import com.example.android.wearable.wear.wearnotifications.handlers.BigTextIntentService;
+import com.example.android.wearable.wear.wearnotifications.handlers.BigTextMainActivity;
+import com.example.android.wearable.wear.wearnotifications.handlers.InboxMainActivity;
+import com.example.android.wearable.wear.wearnotifications.handlers.MessagingIntentService;
+import com.example.android.wearable.wear.wearnotifications.handlers.MessagingMainActivity;
+import com.example.android.wearable.wear.wearnotifications.mock.MockDatabase;
+
+/**
+ * The Activity demonstrates several popular Notification.Style examples along with their best
+ * practices (include proper Android Wear support when you don't have a dedicated Android Wear
+ * app).
+ */
+public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
+
+    public static final String TAG = "MainActivity";
+
+    public static final int NOTIFICATION_ID = 888;
+
+    // Used for Notification Style array and switch statement for Spinner selection
+    private static final String BIG_TEXT_STYLE = "BIG_TEXT_STYLE";
+    private static final String BIG_PICTURE_STYLE = "BIG_PICTURE_STYLE";
+    private static final String INBOX_STYLE = "INBOX_STYLE";
+    private static final String MESSAGING_STYLE = "MESSAGING_STYLE";
+
+    // Collection of notification styles to back ArrayAdapter for Spinner
+    private static final String[] NOTIFICATION_STYLES =
+            {BIG_TEXT_STYLE, BIG_PICTURE_STYLE, INBOX_STYLE, MESSAGING_STYLE};
+
+    private static final String[] NOTIFICATION_STYLES_DESCRIPTION =
+            {
+                    "Demos reminder type app using BIG_TEXT_STYLE",
+                    "Demos social type app using BIG_PICTURE_STYLE + inline notification response",
+                    "Demos email type app using INBOX_STYLE",
+                    "Demos messaging app using MESSAGING_STYLE + inline notification responses"
+            };
+
+    private NotificationManagerCompat mNotificationManagerCompat;
+
+    private int mSelectedNotification = 0;
+
+    // RelativeLayout is needed for SnackBars to alert users when Notifications are disabled for app
+    private RelativeLayout mMainRelativeLayout;
+    private Spinner mSpinner;
+    private TextView mNotificationDetailsTextView;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+
+        mMainRelativeLayout = (RelativeLayout) findViewById(R.id.mainRelativeLayout);
+        mNotificationDetailsTextView = (TextView) findViewById(R.id.notificationDetails);
+        mSpinner = (Spinner) findViewById(R.id.spinner);
+
+        mNotificationManagerCompat = NotificationManagerCompat.from(getApplicationContext());
+
+        // Create an ArrayAdapter using the string array and a default spinner layout
+        ArrayAdapter<CharSequence> adapter =
+                new ArrayAdapter(
+                        this,
+                        android.R.layout.simple_spinner_item,
+                        NOTIFICATION_STYLES);
+        // Specify the layout to use when the list of choices appears
+        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+        // Apply the adapter to the spinner
+        mSpinner.setAdapter(adapter);
+        mSpinner.setOnItemSelectedListener(this);
+    }
+
+    @Override
+    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+        Log.d(TAG, "onItemSelected(): position: " + position + " id: " + id);
+
+        mSelectedNotification = position;
+
+        mNotificationDetailsTextView.setText(
+                NOTIFICATION_STYLES_DESCRIPTION[mSelectedNotification]);
+    }
+    @Override
+    public void onNothingSelected(AdapterView<?> parent) {
+        // Required
+    }
+
+    public void onClick(View view) {
+
+        Log.d(TAG, "onClick()");
+
+        boolean areNotificationsEnabled = mNotificationManagerCompat.areNotificationsEnabled();
+
+        if (!areNotificationsEnabled) {
+            // Because the user took an action to create a notification, we create a prompt to let
+            // the user re-enable notifications for this application again.
+            Snackbar snackbar = Snackbar
+                    .make(
+                            mMainRelativeLayout,
+                            "You need to enable notifications for this app",
+                            Snackbar.LENGTH_LONG)
+                    .setAction("ENABLE", new View.OnClickListener() {
+                        @Override
+                        public void onClick(View view) {
+                            // Links to this app's notification settings
+                            openNotificationSettingsForApp();
+                        }
+                    });
+            snackbar.show();
+            return;
+        }
+
+        String notificationStyle = NOTIFICATION_STYLES[mSelectedNotification];
+
+        switch (notificationStyle) {
+            case BIG_TEXT_STYLE:
+                generateBigTextStyleNotification();
+                break;
+
+            case BIG_PICTURE_STYLE:
+                generateBigPictureStyleNotification();
+                break;
+
+            case INBOX_STYLE:
+                generateInboxStyleNotification();
+                break;
+
+            case MESSAGING_STYLE:
+                generateMessagingStyleNotification();
+                break;
+
+            default:
+                // continue below
+        }
+    }
+
+    /*
+     * Generates a BIG_TEXT_STYLE Notification that supports both phone/tablet and wear. For devices
+     * on API level 16 (4.1.x - Jelly Bean) and after, displays BIG_TEXT_STYLE. Otherwise, displays
+     * a basic notification.
+     */
+    private void generateBigTextStyleNotification() {
+
+        Log.d(TAG, "generateBigTextStyleNotification()");
+
+        // Main steps for building a BIG_TEXT_STYLE notification:
+        //      0. Get your data
+        //      1. Build the BIG_TEXT_STYLE
+        //      2. Set up main Intent for notification
+        //      3. Create additional Actions for the Notification
+        //      4. Build and issue the notification
+
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.BigTextStyleReminderAppData bigTextStyleReminderAppData =
+                MockDatabase.getBigTextStyleData();
+
+        // 1. Build the BIG_TEXT_STYLE
+        BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle()
+                // Overrides ContentText in the big form of the template
+                .bigText(bigTextStyleReminderAppData.getBigText())
+                // Overrides ContentTitle in the big form of the template
+                .setBigContentTitle(bigTextStyleReminderAppData.getBigContentTitle())
+                // Summary line after the detail section in the big form of the template
+                // Note: To improve readability, don't overload the user with info. If Summary Text
+                // doesn't add critical information, you should skip it.
+                .setSummaryText(bigTextStyleReminderAppData.getSummaryText());
+
+
+        // 2. Set up main Intent for notification
+        Intent notifyIntent = new Intent(this, BigTextMainActivity.class);
+
+        // When creating your Intent, you need to take into account the back state, i.e., what
+        // happens after your Activity launches and the user presses the back button.
+
+        // There are two options:
+        //      1. Regular activity - You're starting an Activity that's part of the application's
+        //      normal workflow.
+
+        //      2. Special activity - The user only sees this Activity if it's started from a
+        //      notification. In a sense, the Activity extends the notification by providing
+        //      information that would be hard to display in the notification itself.
+
+        // For the BIG_TEXT_STYLE notification, we will consider the activity launched by the main
+        // Intent as a special activity, so we will follow option 2.
+
+        // For an example of option 1, check either the MESSAGING_STYLE or BIG_PICTURE_STYLE
+        // examples.
+
+        // For more information, check out our dev article:
+        // https://developer.android.com/training/notify-user/navigation.html
+
+        // Sets the Activity to start in a new, empty task
+        notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+
+        PendingIntent notifyPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        notifyIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+
+        // 3. Create additional Actions (Intents) for the Notification
+
+        // In our case, we create two additional actions: a Snooze action and a Dismiss action
+        // Snooze Action
+        Intent snoozeIntent = new Intent(this, BigTextIntentService.class);
+        snoozeIntent.setAction(BigTextIntentService.ACTION_SNOOZE);
+
+        PendingIntent snoozePendingIntent = PendingIntent.getService(this, 0, snoozeIntent, 0);
+        NotificationCompat.Action snoozeAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_alarm_white_48dp,
+                        "Snooze",
+                        snoozePendingIntent)
+                        .build();
+
+
+        // Dismiss Action
+        Intent dismissIntent = new Intent(this, BigTextIntentService.class);
+        dismissIntent.setAction(BigTextIntentService.ACTION_DISMISS);
+
+        PendingIntent dismissPendingIntent = PendingIntent.getService(this, 0, dismissIntent, 0);
+        NotificationCompat.Action dismissAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_cancel_white_48dp,
+                        "Dismiss",
+                        dismissPendingIntent)
+                        .build();
+
+
+        // 4. Build and issue the notification
+
+        // Because we want this to be a new notification (not updating a previous notification), we
+        // create a new Builder. Later, we use the same global builder to get back the notification
+        // we built here for the snooze action, that is, canceling the notification and relaunching
+        // it several seconds later.
+
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        Notification notification = notificationCompatBuilder
+                // BIG_TEXT_STYLE sets title and content for API 16 (4.1 and after)
+                .setStyle(bigTextStyle)
+                // Title for API <16 (4.0 and below) devices
+                .setContentTitle(bigTextStyleReminderAppData.getContentTitle())
+                // Content for API <24 (7.0 and below) devices
+                .setContentText(bigTextStyleReminderAppData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_alarm_white_48dp))
+                .setContentIntent(notifyPendingIntent)
+                // Set primary color (important for Wear 2.0 Notifications)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+
+                // SIDE NOTE: Auto-bundling is enabled for 4 or more notifications on API 24+ (N+)
+                // devices and all Android Wear devices. If you have more than one notification and
+                // you prefer a different summary notification, set a group key and create a
+                // summary notification via
+                // .setGroupSummary(true)
+                // .setGroup(GROUP_KEY_YOUR_NAME_HERE)
+
+                .setCategory(Notification.CATEGORY_REMINDER)
+                .setPriority(Notification.PRIORITY_HIGH)
+
+                // Shows content on the lock-screen
+                .setVisibility(Notification.VISIBILITY_PUBLIC)
+
+                // Adds additional actions specified above
+                .addAction(snoozeAction)
+                .addAction(dismissAction)
+
+                .build();
+
+        mNotificationManagerCompat.notify(NOTIFICATION_ID, notification);
+    }
+
+    /*
+     * Generates a BIG_PICTURE_STYLE Notification that supports both phone/tablet and wear. For
+     * devices on API level 16 (4.1.x - Jelly Bean) and after, displays BIG_PICTURE_STYLE.
+     * Otherwise, displays a basic notification.
+     *
+     * This example Notification is a social post. It allows updating the notification with
+     * comments/responses via RemoteInput and the BigPictureSocialIntentService on 24+ (N+) and
+     * Android Wear devices.
+     */
+    private void generateBigPictureStyleNotification() {
+
+        Log.d(TAG, "generateBigPictureStyleNotification()");
+
+        // Main steps for building a BIG_PICTURE_STYLE notification:
+        //      0. Get your data
+        //      1. Build the BIG_PICTURE_STYLE
+        //      2. Set up main Intent for notification
+        //      3. Set up RemoteInput, so users can input (keyboard and voice) from notification
+        //      4. Build and issue the notification
+
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.BigPictureStyleSocialAppData bigPictureStyleSocialAppData =
+                MockDatabase.getBigPictureStyleData();
+
+        // 1. Build the BIG_PICTURE_STYLE
+        BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle()
+                // Provides the bitmap for the BigPicture notification
+                .bigPicture(
+                        BitmapFactory.decodeResource(
+                                getResources(),
+                                bigPictureStyleSocialAppData.getBigImage()))
+                // Overrides ContentTitle in the big form of the template
+                .setBigContentTitle(bigPictureStyleSocialAppData.getBigContentTitle())
+                // Summary line after the detail section in the big form of the template
+                .setSummaryText(bigPictureStyleSocialAppData.getSummaryText());
+
+        // 2. Set up main Intent for notification
+        Intent mainIntent = new Intent(this, BigPictureSocialMainActivity.class);
+
+        // When creating your Intent, you need to take into account the back state, i.e., what
+        // happens after your Activity launches and the user presses the back button.
+
+        // There are two options:
+        //      1. Regular activity - You're starting an Activity that's part of the application's
+        //      normal workflow.
+
+        //      2. Special activity - The user only sees this Activity if it's started from a
+        //      notification. In a sense, the Activity extends the notification by providing
+        //      information that would be hard to display in the notification itself.
+
+        // Even though this sample's MainActivity doesn't link to the Activity this Notification
+        // launches directly, i.e., it isn't part of the normal workflow, a social app generally
+        // always links to individual posts as part of the app flow, so we will follow option 1.
+
+        // For an example of option 2, check out the BIG_TEXT_STYLE example.
+
+        // For more information, check out our dev article:
+        // https://developer.android.com/training/notify-user/navigation.html
+
+        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
+        // Adds the back stack
+        stackBuilder.addParentStack(BigPictureSocialMainActivity.class);
+        // Adds the Intent to the top of the stack
+        stackBuilder.addNextIntent(mainIntent);
+        // Gets a PendingIntent containing the entire back stack
+        PendingIntent mainPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        mainIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+        // 3. Set up RemoteInput, so users can input (keyboard and voice) from notification
+
+        // Note: For API <24 (M and below) we need to use an Activity, so the lock-screen presents
+        // the auth challenge. For API 24+ (N and above), we use a Service (could be a
+        // BroadcastReceiver), so the user can input from Notification or lock-screen (they have
+        // choice to allow) without leaving the notification.
+
+        // Create the RemoteInput
+        String replyLabel = getString(R.string.reply_label);
+        RemoteInput remoteInput =
+                new RemoteInput.Builder(BigPictureSocialIntentService.EXTRA_COMMENT)
+                        .setLabel(replyLabel)
+                        // List of quick response choices for any wearables paired with the phone
+                        .setChoices(bigPictureStyleSocialAppData.getPossiblePostResponses())
+                        .build();
+
+        // Pending intent =
+        //      API <24 (M and below): activity so the lock-screen presents the auth challenge
+        //      API 24+ (N and above): this should be a Service or BroadcastReceiver
+        PendingIntent replyActionPendingIntent;
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            Intent intent = new Intent(this, BigPictureSocialIntentService.class);
+            intent.setAction(BigPictureSocialIntentService.ACTION_COMMENT);
+            replyActionPendingIntent = PendingIntent.getService(this, 0, intent, 0);
+
+        } else {
+            replyActionPendingIntent = mainPendingIntent;
+        }
+
+        NotificationCompat.Action replyAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_reply_black_18dp,
+                        replyLabel,
+                        replyActionPendingIntent)
+                        .addRemoteInput(remoteInput)
+                        .build();
+
+        // 4. Build and issue the notification
+
+        // Because we want this to be a new notification (not updating a previous notification), we
+        // create a new Builder. Later, we use the same global builder to get back the notification
+        // we built here for a comment on the post.
+
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        // 4. Build and issue the notification
+        notificationCompatBuilder
+                // BIG_PICTURE_STYLE sets title and content for API 16 (4.1 and after)
+                .setStyle(bigPictureStyle)
+                // Title for API <16 (4.0 and below) devices
+                .setContentTitle(bigPictureStyleSocialAppData.getContentTitle())
+                // Content for API <24 (7.0 and below) devices
+                .setContentText(bigPictureStyleSocialAppData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_person_black_48dp))
+                .setContentIntent(mainPendingIntent)
+                // Set primary color (important for Wear 2.0 Notifications)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+
+                // SIDE NOTE: Auto-bundling is enabled for 4 or more notifications on API 24+ (N+)
+                // devices and all Android Wear devices. If you have more than one notification and
+                // you prefer a different summary notification, set a group key and create a
+                // summary notification via
+                // .setGroupSummary(true)
+                // .setGroup(GROUP_KEY_YOUR_NAME_HERE)
+
+                .setSubText(Integer.toString(1))
+                .addAction(replyAction)
+                .setCategory(Notification.CATEGORY_SOCIAL)
+                .setPriority(Notification.PRIORITY_HIGH)
+
+                // Hides content on the lock-screen
+                .setVisibility(Notification.VISIBILITY_PRIVATE);
+
+        // If the phone is in "Do not disturb mode, the user will still be notified if
+        // the sender(s) is starred as a favorite.
+        for (String name : bigPictureStyleSocialAppData.getParticipants()) {
+            notificationCompatBuilder.addPerson(name);
+        }
+
+        Notification notification = notificationCompatBuilder.build();
+
+        mNotificationManagerCompat.notify(NOTIFICATION_ID, notification);
+    }
+
+    /*
+     * Generates a INBOX_STYLE Notification that supports both phone/tablet and wear. For devices
+     * on API level 16 (4.1.x - Jelly Bean) and after, displays INBOX_STYLE. Otherwise, displays a
+     * basic notification.
+     */
+    private void generateInboxStyleNotification() {
+
+        Log.d(TAG, "generateInboxStyleNotification()");
+
+
+        // Main steps for building a INBOX_STYLE notification:
+        //      0. Get your data
+        //      1. Build the INBOX_STYLE
+        //      2. Set up main Intent for notification
+        //      3. Build and issue the notification
+
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.InboxStyleEmailAppData inboxStyleEmailAppData =
+                MockDatabase.getInboxStyleData();
+
+        // 1. Build the INBOX_STYLE
+        NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle()
+                // This title is slightly different than regular title, since I know INBOX_STYLE is
+                // available.
+                .setBigContentTitle(inboxStyleEmailAppData.getBigContentTitle())
+                .setSummaryText(inboxStyleEmailAppData.getSummaryText());
+
+        // Add each summary line of the new emails, you can add up to 5
+        for (String summary : inboxStyleEmailAppData.getIndividualEmailSummary()) {
+            inboxStyle.addLine(summary);
+        }
+
+        // 2. Set up main Intent for notification
+        Intent mainIntent = new Intent(this, InboxMainActivity.class);
+
+        // When creating your Intent, you need to take into account the back state, i.e., what
+        // happens after your Activity launches and the user presses the back button.
+
+        // There are two options:
+        //      1. Regular activity - You're starting an Activity that's part of the application's
+        //      normal workflow.
+
+        //      2. Special activity - The user only sees this Activity if it's started from a
+        //      notification. In a sense, the Activity extends the notification by providing
+        //      information that would be hard to display in the notification itself.
+
+        // Even though this sample's MainActivity doesn't link to the Activity this Notification
+        // launches directly, i.e., it isn't part of the normal workflow, a eamil app generally
+        // always links to individual emails as part of the app flow, so we will follow option 1.
+
+        // For an example of option 2, check out the BIG_TEXT_STYLE example.
+
+        // For more information, check out our dev article:
+        // https://developer.android.com/training/notify-user/navigation.html
+
+        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
+        // Adds the back stack
+        stackBuilder.addParentStack(InboxMainActivity.class);
+        // Adds the Intent to the top of the stack
+        stackBuilder.addNextIntent(mainIntent);
+        // Gets a PendingIntent containing the entire back stack
+        PendingIntent mainPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        mainIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+        // 3. Build and issue the notification
+
+        // Because we want this to be a new notification (not updating a previous notification), we
+        // create a new Builder. However, we don't need to update this notification later, so we
+        // will not need to set a global builder for access to the notification later.
+
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        // 4. Build and issue the notification
+        notificationCompatBuilder
+
+                // INBOX_STYLE sets title and content for API 16+ (4.1 and after) when the
+                // notification is expanded
+                .setStyle(inboxStyle)
+
+                // Title for API <16 (4.0 and below) devices and API 16+ (4.1 and after) when the
+                // notification is collapsed
+                .setContentTitle(inboxStyleEmailAppData.getContentTitle())
+
+                // Content for API <24 (7.0 and below) devices and API 16+ (4.1 and after) when the
+                // notification is collapsed
+                .setContentText(inboxStyleEmailAppData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_person_black_48dp))
+                .setContentIntent(mainPendingIntent)
+                // Set primary color (important for Wear 2.0 Notifications)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+
+                // SIDE NOTE: Auto-bundling is enabled for 4 or more notifications on API 24+ (N+)
+                // devices and all Android Wear devices. If you have more than one notification and
+                // you prefer a different summary notification, set a group key and create a
+                // summary notification via
+                // .setGroupSummary(true)
+                // .setGroup(GROUP_KEY_YOUR_NAME_HERE)
+
+                // Sets large number at the right-hand side of the notification for API <24 devices
+                .setSubText(Integer.toString(inboxStyleEmailAppData.getNumberOfNewEmails()))
+
+                .setCategory(Notification.CATEGORY_EMAIL)
+                .setPriority(Notification.PRIORITY_HIGH)
+
+                // Hides content on the lock-screen
+                .setVisibility(Notification.VISIBILITY_PRIVATE);
+
+        // If the phone is in "Do not disturb mode, the user will still be notified if
+        // the sender(s) is starred as a favorite.
+        for (String name : inboxStyleEmailAppData.getParticipants()) {
+            notificationCompatBuilder.addPerson(name);
+        }
+
+        Notification notification = notificationCompatBuilder.build();
+
+        mNotificationManagerCompat.notify(NOTIFICATION_ID, notification);
+    }
+
+    /*
+     * Generates a MESSAGING_STYLE Notification that supports both phone/tablet and wear. For
+     * devices on API level 24 (7.0 - Nougat) and after, displays MESSAGING_STYLE. Otherwise,
+     * displays a basic BIG_TEXT_STYLE.
+     */
+    private void generateMessagingStyleNotification() {
+
+        Log.d(TAG, "generateMessagingStyleNotification()");
+
+        // Main steps for building a MESSAGING_STYLE notification:
+        //      0. Get your data
+        //      1. Build the MESSAGING_STYLE
+        //      2. Add support for Wear 1.+
+        //      3. Set up main Intent for notification
+        //      4. Set up RemoteInput (users can input directly from notification)
+        //      5. Build and issue the notification
+
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.MessagingStyleCommsAppData messagingStyleCommsAppData =
+                MockDatabase.getMessagingStyleData();
+
+        // 1. Build the Notification.Style (MESSAGING_STYLE)
+        String contentTitle = messagingStyleCommsAppData.getContentTitle();
+
+        NotificationCompat.MessagingStyle messagingStyle =
+                new NotificationCompat.MessagingStyle(messagingStyleCommsAppData.getReplayName())
+                        // You could set a different title to appear when the messaging style
+                        // is supported on device (24+) if you wish. In our case, we use the same
+                        // title.
+                        .setConversationTitle(contentTitle);
+
+        // Adds all Messages
+        // Note: Messages include the text, timestamp, and sender
+        for (MessagingStyle.Message message : messagingStyleCommsAppData.getMessages()) {
+            messagingStyle.addMessage(message);
+        }
+
+
+        // 2. Add support for Wear 1.+
+
+        // Since Wear 1.0 doesn't support the MESSAGING_STYLE, we use the BIG_TEXT_STYLE, so all the
+        // text is visible.
+
+        // This is basically a toString() of all the Messages above.
+        String fullMessageForWearVersion1 = messagingStyleCommsAppData.getFullConversation();
+
+        Notification chatHistoryForWearV1 = new NotificationCompat.Builder(getApplicationContext())
+                .setStyle(new BigTextStyle().bigText(fullMessageForWearVersion1))
+                .setContentTitle(contentTitle)
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setContentText(fullMessageForWearVersion1)
+                .build();
+
+        // Adds page with all text to support Wear 1.+.
+        NotificationCompat.WearableExtender wearableExtenderForWearVersion1 =
+                new NotificationCompat.WearableExtender()
+                        .addPage(chatHistoryForWearV1);
+
+
+
+        // 3. Set up main Intent for notification
+        Intent notifyIntent = new Intent(this, MessagingMainActivity.class);
+
+        // When creating your Intent, you need to take into account the back state, i.e., what
+        // happens after your Activity launches and the user presses the back button.
+
+        // There are two options:
+        //      1. Regular activity - You're starting an Activity that's part of the application's
+        //      normal workflow.
+
+        //      2. Special activity - The user only sees this Activity if it's started from a
+        //      notification. In a sense, the Activity extends the notification by providing
+        //      information that would be hard to display in the notification itself.
+
+        // Even though this sample's MainActivity doesn't link to the Activity this Notification
+        // launches directly, i.e., it isn't part of the normal workflow, a chat app generally
+        // always links to individual conversations as part of the app flow, so we will follow
+        // option 1.
+
+        // For an example of option 2, check out the BIG_TEXT_STYLE example.
+
+        // For more information, check out our dev article:
+        // https://developer.android.com/training/notify-user/navigation.html
+
+        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
+        // Adds the back stack
+        stackBuilder.addParentStack(MessagingMainActivity.class);
+        // Adds the Intent to the top of the stack
+        stackBuilder.addNextIntent(notifyIntent);
+        // Gets a PendingIntent containing the entire back stack
+        PendingIntent mainPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        notifyIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+
+        // 4. Set up RemoteInput, so users can input (keyboard and voice) from notification
+
+        // Note: For API <24 (M and below) we need to use an Activity, so the lock-screen present
+        // the auth challenge. For API 24+ (N and above), we use a Service (could be a
+        // BroadcastReceiver), so the user can input from Notification or lock-screen (they have
+        // choice to allow) without leaving the notification.
+
+        // Create the RemoteInput specifying this key
+        String replyLabel = getString(R.string.reply_label);
+        RemoteInput remoteInput = new RemoteInput.Builder(MessagingIntentService.EXTRA_REPLY)
+                .setLabel(replyLabel)
+                .build();
+
+        // Pending intent =
+        //      API <24 (M and below): activity so the lock-screen presents the auth challenge
+        //      API 24+ (N and above): this should be a Service or BroadcastReceiver
+        PendingIntent replyActionPendingIntent;
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            Intent intent = new Intent(this, MessagingIntentService.class);
+            intent.setAction(MessagingIntentService.ACTION_REPLY);
+            replyActionPendingIntent = PendingIntent.getService(this, 0, intent, 0);
+
+        } else {
+            replyActionPendingIntent = mainPendingIntent;
+        }
+
+        NotificationCompat.Action replyAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_reply_black_18dp,
+                        replyLabel,
+                        replyActionPendingIntent)
+                        .addRemoteInput(remoteInput)
+                        // Allows system to generate replies by context of conversation
+                        .setAllowGeneratedReplies(true)
+                        .build();
+
+
+        // 5. Build and issue the notification
+
+        // Because we want this to be a new notification (not updating current notification), we
+        // create a new Builder. Later, we update this same notification, so we need to save this
+        // Builder globally (as outlined earlier).
+
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        // Builds and issues notification
+        notificationCompatBuilder
+                // MESSAGING_STYLE sets title and content for API 24+ (N and above) devices
+                .setStyle(messagingStyle)
+                // Title for API <24 (M and below) devices
+                .setContentTitle(contentTitle)
+                // Content for API <24 (M and below) devices
+                .setContentText(messagingStyleCommsAppData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_person_black_48dp))
+                .setContentIntent(mainPendingIntent)
+                // Set primary color (important for Wear 2.0 Notifications)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+
+                // SIDE NOTE: Auto-bundling is enabled for 4 or more notifications on API 24+ (N+)
+                // devices and all Android Wear devices. If you have more than one notification and
+                // you prefer a different summary notification, set a group key and create a
+                // summary notification via
+                // .setGroupSummary(true)
+                // .setGroup(GROUP_KEY_YOUR_NAME_HERE)
+
+                // Number of new notifications for API <24 (M and below) devices
+                .setSubText(Integer.toString(messagingStyleCommsAppData.getNumberOfNewMessages()))
+
+                .addAction(replyAction)
+                .setCategory(Notification.CATEGORY_MESSAGE)
+                .setPriority(Notification.PRIORITY_HIGH)
+
+                // Hides content on the lock-screen
+                .setVisibility(Notification.VISIBILITY_PRIVATE)
+
+                // Adds multiple pages for easy consumption on a wear device.
+                .extend(wearableExtenderForWearVersion1);
+
+        // If the phone is in "Do not disturb mode, the user will still be notified if
+        // the sender(s) is starred as a favorite.
+        for (String name : messagingStyleCommsAppData.getParticipants()) {
+            notificationCompatBuilder.addPerson(name);
+        }
+
+        Notification notification = notificationCompatBuilder.build();
+        mNotificationManagerCompat.notify(NOTIFICATION_ID, notification);
+    }
+
+    /**
+     * Helper method for the SnackBar action, i.e., if the user has this application's notifications
+     * disabled, this opens up the dialog to turn them back on after the user requests a
+     * Notification launch.
+     *
+     * IMPORTANT NOTE: You should not do this action unless the user takes an action to see your
+     * Notifications like this sample demonstrates. Spamming users to re-enable your notifications
+     * is a bad idea.
+     */
+    private void openNotificationSettingsForApp() {
+        // Links to this app's notification settings
+        Intent intent = new Intent();
+        intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
+        intent.putExtra("app_package", getPackageName());
+        intent.putExtra("app_uid", getApplicationInfo().uid);
+        startActivity(intent);
+    }
+}
\ No newline at end of file
diff --git a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialIntentService.java b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialIntentService.java
new file mode 100644
index 0000000..ce6325f
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialIntentService.java
@@ -0,0 +1,228 @@
+/*
+Copyright 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.wearable.wear.wearnotifications.handlers;
+
+import android.app.IntentService;
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.graphics.BitmapFactory;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.v4.app.NotificationCompat.BigPictureStyle;
+import android.support.v4.app.NotificationManagerCompat;
+import android.support.v4.app.RemoteInput;
+import android.support.v4.app.TaskStackBuilder;
+import android.support.v7.app.NotificationCompat;
+import android.util.Log;
+
+import com.example.android.wearable.wear.wearnotifications.GlobalNotificationBuilder;
+import com.example.android.wearable.wear.wearnotifications.MainActivity;
+import com.example.android.wearable.wear.wearnotifications.R;
+import com.example.android.wearable.wear.wearnotifications.mock.MockDatabase;
+
+/**
+ * Asynchronously handles updating social app posts (and active Notification) with comments from
+ * user. Notification for social app use BigPictureStyle.
+ */
+public class BigPictureSocialIntentService extends IntentService {
+
+    private static final String TAG = "BigPictureService";
+
+    public static final String ACTION_COMMENT =
+            "com.example.android.wearable.wear.wearnotifications.handlers.action.COMMENT";
+
+    public static final String EXTRA_COMMENT =
+            "com.example.android.wearable.wear.wearnotifications.handlers.extra.COMMENT";
+
+    public BigPictureSocialIntentService() {
+        super("BigPictureSocialIntentService");
+    }
+
+    @Override
+    protected void onHandleIntent(Intent intent) {
+        Log.d(TAG, "onHandleIntent(): " + intent);
+
+        if (intent != null) {
+            final String action = intent.getAction();
+            if (ACTION_COMMENT.equals(action)) {
+                handleActionComment(getMessage(intent));
+            }
+        }
+    }
+
+    /**
+     * Handles action for adding a comment from the notification.
+     */
+    private void handleActionComment(CharSequence comment) {
+        Log.d(TAG, "handleActionComment(): " + comment);
+
+        if (comment != null) {
+
+            // TODO: Asynchronously save your message to Database and servers.
+
+            /*
+             * You have two options for updating your notification (this class uses approach #2):
+             *
+             *  1. Use a new NotificationCompatBuilder to create the Notification. This approach
+             *  requires you to get *ALL* the information that existed in the previous
+             *  Notification (and updates) and pass it to the builder. This is the approach used in
+             *  the MainActivity.
+             *
+             *  2. Use the original NotificationCompatBuilder to create the Notification. This
+             *  approach requires you to store a reference to the original builder. The benefit is
+             *  you only need the new/updated information. In our case, the comment from the user
+             *  regarding the post (which we already have here).
+             *
+             *  IMPORTANT NOTE: You shouldn't save/modify the resulting Notification object using
+             *  its member variables and/or legacy APIs. If you want to retain anything from update
+             *  to update, retain the Builder as option 2 outlines.
+             */
+
+            // Retrieves NotificationCompat.Builder used to create initial Notification
+            NotificationCompat.Builder notificationCompatBuilder =
+                    GlobalNotificationBuilder.getNotificationCompatBuilderInstance();
+
+            // Recreate builder from persistent state if app process is killed
+            if (notificationCompatBuilder == null) {
+                // Note: New builder set globally in the method
+                notificationCompatBuilder = recreateBuilderWithBigPictureStyle();
+            }
+
+            // Updates active Notification
+            Notification updatedNotification = notificationCompatBuilder
+                    // Adds a line and comment below content in Notification
+                    .setRemoteInputHistory(new CharSequence[]{comment})
+                    .build();
+
+            // Pushes out the updated Notification
+            NotificationManagerCompat notificationManagerCompat =
+                    NotificationManagerCompat.from(getApplicationContext());
+            notificationManagerCompat.notify(MainActivity.NOTIFICATION_ID, updatedNotification);
+        }
+    }
+
+    /*
+     * Extracts CharSequence created from the RemoteInput associated with the Notification.
+     */
+    private CharSequence getMessage(Intent intent) {
+        Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
+        if (remoteInput != null) {
+            return remoteInput.getCharSequence(EXTRA_COMMENT);
+        }
+        return null;
+    }
+
+    /*
+     * This recreates the notification from the persistent state in case the app process was killed.
+     * It is basically the same code for creating the Notification from MainActivity.
+     */
+    private NotificationCompat.Builder recreateBuilderWithBigPictureStyle() {
+
+        // Main steps for building a BIG_PICTURE_STYLE notification (for more detailed comments on
+        // building this notification, check MainActivity.java):
+        //      0. Get your data
+        //      1. Build the BIG_PICTURE_STYLE
+        //      2. Set up main Intent for notification
+        //      3. Set up RemoteInput, so users can input (keyboard and voice) from notification
+        //      4. Build and issue the notification
+
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.BigPictureStyleSocialAppData bigPictureStyleSocialAppData =
+                MockDatabase.getBigPictureStyleData();
+
+        // 1. Build the BIG_PICTURE_STYLE
+        BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle()
+                .bigPicture(
+                        BitmapFactory.decodeResource(
+                                getResources(),
+                                bigPictureStyleSocialAppData.getBigImage()))
+                .setBigContentTitle(bigPictureStyleSocialAppData.getBigContentTitle())
+                .setSummaryText(bigPictureStyleSocialAppData.getSummaryText());
+
+        // 2. Set up main Intent for notification
+        Intent mainIntent = new Intent(this, BigPictureSocialMainActivity.class);
+
+        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
+        stackBuilder.addParentStack(BigPictureSocialMainActivity.class);
+        stackBuilder.addNextIntent(mainIntent);
+
+        PendingIntent mainPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        mainIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+        // 3. Set up RemoteInput, so users can input (keyboard and voice) from notification
+        String replyLabel = getString(R.string.reply_label);
+        RemoteInput remoteInput =
+                new RemoteInput.Builder(BigPictureSocialIntentService.EXTRA_COMMENT)
+                        .setLabel(replyLabel)
+                        .setChoices(bigPictureStyleSocialAppData.getPossiblePostResponses())
+                        .build();
+
+        PendingIntent replyActionPendingIntent;
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            Intent intent = new Intent(this, BigPictureSocialIntentService.class);
+            intent.setAction(BigPictureSocialIntentService.ACTION_COMMENT);
+            replyActionPendingIntent = PendingIntent.getService(this, 0, intent, 0);
+
+        } else {
+            replyActionPendingIntent = mainPendingIntent;
+        }
+
+        NotificationCompat.Action replyAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_reply_black_18dp,
+                        replyLabel,
+                        replyActionPendingIntent)
+                        .addRemoteInput(remoteInput)
+                        .build();
+
+        // 4. Build and issue the notification
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        notificationCompatBuilder
+                .setStyle(bigPictureStyle)
+                .setContentTitle(bigPictureStyleSocialAppData.getContentTitle())
+                .setContentText(bigPictureStyleSocialAppData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_person_black_48dp))
+                .setContentIntent(mainPendingIntent)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+                .setSubText(Integer.toString(1))
+                .addAction(replyAction)
+                .setCategory(Notification.CATEGORY_SOCIAL)
+                .setPriority(Notification.PRIORITY_HIGH)
+                .setVisibility(Notification.VISIBILITY_PRIVATE);
+
+        // If the phone is in "Do not disturb mode, the user will still be notified if
+        // the sender(s) is starred as a favorite.
+        for (String name : bigPictureStyleSocialAppData.getParticipants()) {
+            notificationCompatBuilder.addPerson(name);
+        }
+
+        return notificationCompatBuilder;
+    }
+}
\ No newline at end of file
diff --git a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialMainActivity.java b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialMainActivity.java
new file mode 100644
index 0000000..f9e13c2
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialMainActivity.java
@@ -0,0 +1,45 @@
+/*
+Copyright 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.wearable.wear.wearnotifications.handlers;
+
+import android.app.Activity;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.os.Bundle;
+
+import com.example.android.wearable.wear.wearnotifications.MainActivity;
+import com.example.android.wearable.wear.wearnotifications.R;
+
+/**
+ * Template class meant to include functionality for your Social App. (This project's main focus
+ * is on Notification Styles.)
+ */
+public class BigPictureSocialMainActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_big_picture_main);
+
+        // Cancel Notification
+        NotificationManager notificationManager =
+                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+        notificationManager.cancel(MainActivity.NOTIFICATION_ID);
+
+        // TODO: Handle and display social post from your database
+    }
+}
\ No newline at end of file
diff --git a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextIntentService.java b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextIntentService.java
new file mode 100644
index 0000000..8f6664d
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextIntentService.java
@@ -0,0 +1,206 @@
+/*
+Copyright 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.wearable.wear.wearnotifications.handlers;
+
+import android.app.IntentService;
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.graphics.BitmapFactory;
+import android.support.v4.app.NotificationCompat.BigTextStyle;
+import android.support.v4.app.NotificationManagerCompat;
+import android.support.v7.app.NotificationCompat;
+import android.util.Log;
+
+import com.example.android.wearable.wear.wearnotifications.GlobalNotificationBuilder;
+import com.example.android.wearable.wear.wearnotifications.MainActivity;
+import com.example.android.wearable.wear.wearnotifications.R;
+import com.example.android.wearable.wear.wearnotifications.mock.MockDatabase;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Asynchronously handles snooze and dismiss actions for reminder app (and active Notification).
+ * Notification for for reminder app uses BigTextStyle.
+ */
+public class BigTextIntentService extends IntentService {
+
+    private static final String TAG = "BigTextService";
+
+    public static final String ACTION_DISMISS =
+            "com.example.android.wearable.wear.wearnotifications.handlers.action.DISMISS";
+    public static final String ACTION_SNOOZE =
+            "com.example.android.wearable.wear.wearnotifications.handlers.action.SNOOZE";
+
+    private static final long SNOOZE_TIME = TimeUnit.SECONDS.toMillis(5);
+
+    public BigTextIntentService() {
+        super("BigTextIntentService");
+    }
+
+    @Override
+    protected void onHandleIntent(Intent intent) {
+        Log.d(TAG, "onHandleIntent(): " + intent);
+
+        if (intent != null) {
+            final String action = intent.getAction();
+            if (ACTION_DISMISS.equals(action)) {
+                handleActionDismiss();
+            } else if (ACTION_SNOOZE.equals(action)) {
+                handleActionSnooze();
+            }
+        }
+    }
+
+    /**
+     * Handles action Dismiss in the provided background thread.
+     */
+    private void handleActionDismiss() {
+        Log.d(TAG, "handleActionDismiss()");
+
+        NotificationManagerCompat notificationManagerCompat =
+                NotificationManagerCompat.from(getApplicationContext());
+        notificationManagerCompat.cancel(MainActivity.NOTIFICATION_ID);
+    }
+
+    /**
+     * Handles action Snooze in the provided background thread.
+     */
+    private void handleActionSnooze() {
+        Log.d(TAG, "handleActionSnooze()");
+
+        // You could use NotificationManager.getActiveNotifications() if you are targeting SDK 23
+        // and above, but we are targeting devices with lower SDK API numbers, so we saved the
+        // builder globally and get the notification back to recreate it later.
+
+        NotificationCompat.Builder notificationCompatBuilder =
+                GlobalNotificationBuilder.getNotificationCompatBuilderInstance();
+
+        // Recreate builder from persistent state if app process is killed
+        if (notificationCompatBuilder == null) {
+            // Note: New builder set globally in the method
+            notificationCompatBuilder = recreateBuilderWithBigTextStyle();
+        }
+
+        Notification notification;
+        notification = notificationCompatBuilder.build();
+
+
+        if (notification != null) {
+            NotificationManagerCompat notificationManagerCompat =
+                    NotificationManagerCompat.from(getApplicationContext());
+
+            notificationManagerCompat.cancel(MainActivity.NOTIFICATION_ID);
+
+            try {
+                Thread.sleep(SNOOZE_TIME);
+            } catch (InterruptedException ex) {
+                Thread.currentThread().interrupt();
+            }
+            notificationManagerCompat.notify(MainActivity.NOTIFICATION_ID, notification);
+        }
+
+    }
+
+    /*
+     * This recreates the notification from the persistent state in case the app process was killed.
+     * It is basically the same code for creating the Notification from MainActivity.
+     */
+    private NotificationCompat.Builder recreateBuilderWithBigTextStyle() {
+
+        // Main steps for building a BIG_TEXT_STYLE notification (for more detailed comments on
+        // building this notification, check MainActivity.java)::
+        //      0. Get your data
+        //      1. Build the BIG_TEXT_STYLE
+        //      2. Set up main Intent for notification
+        //      3. Create additional Actions for the Notification
+        //      4. Build and issue the notification
+
+        // 0. Get your data
+        MockDatabase.BigTextStyleReminderAppData bigTextData = MockDatabase.getBigTextStyleData();
+
+        // 1. Build the BIG_TEXT_STYLE
+        BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle()
+                .bigText(bigTextData.getBigText())
+                .setBigContentTitle(bigTextData.getBigContentTitle())
+                .setSummaryText(bigTextData.getSummaryText());
+
+
+        // 2. Set up main Intent for notification
+        Intent notifyIntent = new Intent(this, BigTextMainActivity.class);
+        notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+
+        PendingIntent notifyPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        notifyIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+
+        // 3. Create additional Actions (Intents) for the Notification
+
+        // Snooze Action
+        Intent snoozeIntent = new Intent(this, BigTextIntentService.class);
+        snoozeIntent.setAction(BigTextIntentService.ACTION_SNOOZE);
+
+        PendingIntent snoozePendingIntent = PendingIntent.getService(this, 0, snoozeIntent, 0);
+        NotificationCompat.Action snoozeAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_alarm_white_48dp,
+                        "Snooze",
+                        snoozePendingIntent)
+                        .build();
+
+
+        // Dismiss Action
+        Intent dismissIntent = new Intent(this, BigTextIntentService.class);
+        dismissIntent.setAction(BigTextIntentService.ACTION_DISMISS);
+
+        PendingIntent dismissPendingIntent = PendingIntent.getService(this, 0, dismissIntent, 0);
+        NotificationCompat.Action dismissAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_cancel_white_48dp,
+                        "Dismiss",
+                        dismissPendingIntent)
+                        .build();
+
+        // 4. Build and issue the notification
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        notificationCompatBuilder
+                .setStyle(bigTextStyle)
+                .setContentTitle(bigTextData.getContentTitle())
+                .setContentText(bigTextData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_alarm_white_48dp))
+                .setContentIntent(notifyPendingIntent)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+                .setCategory(Notification.CATEGORY_REMINDER)
+                .setPriority(Notification.PRIORITY_HIGH)
+                .setVisibility(Notification.VISIBILITY_PUBLIC)
+                .addAction(snoozeAction)
+                .addAction(dismissAction);
+
+        return notificationCompatBuilder;
+    }
+}
\ No newline at end of file
diff --git a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextMainActivity.java b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextMainActivity.java
new file mode 100644
index 0000000..92ae257
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextMainActivity.java
@@ -0,0 +1,45 @@
+/*
+Copyright 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.wearable.wear.wearnotifications.handlers;
+
+import android.app.Activity;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.os.Bundle;
+
+import com.example.android.wearable.wear.wearnotifications.MainActivity;
+import com.example.android.wearable.wear.wearnotifications.R;
+
+/**
+ * Template class meant to include functionality for your Reminder/Alarm App. (This project's main
+ * focus is on Notification Styles.)
+ */
+public class BigTextMainActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_big_text_main);
+
+        // Cancel Notification
+        NotificationManager notificationManager =
+                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+        notificationManager.cancel(MainActivity.NOTIFICATION_ID);
+
+        // TODO: Handle and display reminder from your database
+    }
+}
\ No newline at end of file
diff --git a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/InboxMainActivity.java b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/InboxMainActivity.java
new file mode 100644
index 0000000..4038746
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/InboxMainActivity.java
@@ -0,0 +1,45 @@
+/*
+Copyright 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.wearable.wear.wearnotifications.handlers;
+
+import android.app.Activity;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.os.Bundle;
+
+import com.example.android.wearable.wear.wearnotifications.MainActivity;
+import com.example.android.wearable.wear.wearnotifications.R;
+
+/**
+ * Template class meant to include functionality for your email app. (This project's main focus
+ * is on Notification Styles.)
+ */
+public class InboxMainActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_inbox_main);
+
+        // Cancel Notification
+        NotificationManager notificationManager =
+                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+        notificationManager.cancel(MainActivity.NOTIFICATION_ID);
+
+        // TODO: Handle and display email from your database
+    }
+}
\ No newline at end of file
diff --git a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingIntentService.java b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingIntentService.java
new file mode 100644
index 0000000..e20c4fb
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingIntentService.java
@@ -0,0 +1,262 @@
+/*
+Copyright 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.wearable.wear.wearnotifications.handlers;
+
+import android.app.IntentService;
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.graphics.BitmapFactory;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.v4.app.NotificationCompat.MessagingStyle;
+import android.support.v4.app.NotificationManagerCompat;
+import android.support.v4.app.RemoteInput;
+import android.support.v4.app.TaskStackBuilder;
+import android.support.v7.app.NotificationCompat;
+import android.util.Log;
+
+import com.example.android.wearable.wear.wearnotifications.GlobalNotificationBuilder;
+import com.example.android.wearable.wear.wearnotifications.MainActivity;
+import com.example.android.wearable.wear.wearnotifications.R;
+import com.example.android.wearable.wear.wearnotifications.mock.MockDatabase;
+
+/**
+ * Asynchronously handles updating messaging app posts (and active Notification) with replies from
+ * user in a conversation. Notification for social app use MessagingStyle.
+ */
+public class MessagingIntentService extends IntentService {
+
+    private static final String TAG = "MessagingIntentService";
+
+    public static final String ACTION_REPLY =
+            "com.example.android.wearable.wear.wearnotifications.handlers.action.REPLY";
+
+    public static final String EXTRA_REPLY =
+            "com.example.android.wearable.wear.wearnotifications.handlers.extra.REPLY";
+
+
+    public MessagingIntentService() {
+        super("MessagingIntentService");
+    }
+
+    @Override
+    protected void onHandleIntent(Intent intent) {
+        Log.d(TAG, "onHandleIntent(): " + intent);
+
+        if (intent != null) {
+            final String action = intent.getAction();
+            if (ACTION_REPLY.equals(action)) {
+                handleActionReply(getMessage(intent));
+            }
+        }
+    }
+
+    /**
+     * Handles action for replying to messages from the notification.
+     */
+    private void handleActionReply(CharSequence replyCharSequence) {
+        Log.d(TAG, "handleActionReply(): " + replyCharSequence);
+
+        if (replyCharSequence != null) {
+
+            // TODO: Asynchronously save your message to Database and servers.
+
+            /*
+             * You have two options for updating your notification (this class uses approach #2):
+             *
+             *  1. Use a new NotificationCompatBuilder to create the Notification. This approach
+             *  requires you to get *ALL* the information that existed in the previous
+             *  Notification (and updates) and pass it to the builder. This is the approach used in
+             *  the MainActivity.
+             *
+             *  2. Use the original NotificationCompatBuilder to create the Notification. This
+             *  approach requires you to store a reference to the original builder. The benefit is
+             *  you only need the new/updated information. In our case, the reply from the user
+             *  which we already have here.
+             *
+             *  IMPORTANT NOTE: You shouldn't save/modify the resulting Notification object using
+             *  its member variables and/or legacy APIs. If you want to retain anything from update
+             *  to update, retain the Builder as option 2 outlines.
+             */
+
+            // Retrieves NotificationCompat.Builder used to create initial Notification
+            NotificationCompat.Builder notificationCompatBuilder =
+                    GlobalNotificationBuilder.getNotificationCompatBuilderInstance();
+
+            // Recreate builder from persistent state if app process is killed
+            if (notificationCompatBuilder == null) {
+                // Note: New builder set globally in the method
+                notificationCompatBuilder = recreateBuilderWithMessagingStyle();
+            }
+
+
+            // Since we are adding to the MessagingStyle, we need to first retrieve the
+            // current MessagingStyle from the Notification itself.
+            Notification notification = notificationCompatBuilder.build();
+            NotificationCompat.MessagingStyle messagingStyle =
+                    NotificationCompat.MessagingStyle
+                            .extractMessagingStyleFromNotification(notification);
+
+            // Add new message to the MessagingStyle
+            messagingStyle.addMessage(replyCharSequence, System.currentTimeMillis(), null);
+
+            // Updates the Notification
+            notification = notificationCompatBuilder
+                    .setStyle(messagingStyle)
+                    .build();
+
+            // Pushes out the updated Notification
+            NotificationManagerCompat notificationManagerCompat =
+                    NotificationManagerCompat.from(getApplicationContext());
+            notificationManagerCompat.notify(MainActivity.NOTIFICATION_ID, notification);
+        }
+    }
+
+    /*
+     * Extracts CharSequence created from the RemoteInput associated with the Notification.
+     */
+    private CharSequence getMessage(Intent intent) {
+        Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
+        if (remoteInput != null) {
+            return remoteInput.getCharSequence(EXTRA_REPLY);
+        }
+        return null;
+    }
+
+    /*
+     * This recreates the notification from the persistent state in case the app process was killed.
+     * It is basically the same code for creating the Notification from MainActivity.
+     */
+    private NotificationCompat.Builder recreateBuilderWithMessagingStyle() {
+
+        // Main steps for building a MESSAGING_STYLE notification (for more detailed comments on
+        // building this notification, check MainActivity.java)::
+        //      0. Get your data
+        //      1. Build the MESSAGING_STYLE
+        //      2. Add support for Wear 1.+
+        //      3. Set up main Intent for notification
+        //      4. Set up RemoteInput (users can input directly from notification)
+        //      5. Build and issue the notification
+
+        // 0. Get your data
+        MockDatabase.MessagingStyleCommsAppData messagingData =
+                MockDatabase.getMessagingStyleData();
+
+        // 1. Build the Notification.Style (MESSAGING_STYLE)
+        String contentTitle = messagingData.getContentTitle();
+
+        NotificationCompat.MessagingStyle messagingStyle =
+                new NotificationCompat.MessagingStyle(messagingData.getReplayName())
+                        .setConversationTitle(contentTitle);
+
+        // Adds all Messages
+        // Note: Messages include the text, timestamp, and sender
+        for (MessagingStyle.Message message : messagingData.getMessages()) {
+            messagingStyle.addMessage(message);
+        }
+
+
+        // 2. Add support for Wear 1.+
+        String fullMessageForWearVersion1 = messagingData.getFullConversation();
+
+        Notification chatHistoryForWearV1 = new NotificationCompat.Builder(getApplicationContext())
+                .setStyle(new NotificationCompat.BigTextStyle().bigText(fullMessageForWearVersion1))
+                .setContentTitle(contentTitle)
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setContentText(fullMessageForWearVersion1)
+                .build();
+
+        NotificationCompat.WearableExtender wearableExtenderForWearVersion1 =
+                new NotificationCompat.WearableExtender()
+                        .addPage(chatHistoryForWearV1);
+
+
+
+        // 3. Set up main Intent for notification
+        Intent notifyIntent = new Intent(this, MessagingMainActivity.class);
+
+        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
+        stackBuilder.addParentStack(MessagingMainActivity.class);
+        stackBuilder.addNextIntent(notifyIntent);
+
+        PendingIntent mainPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        notifyIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+
+        // 4. Set up RemoteInput, so users can input (keyboard and voice) from notification
+        String replyLabel = getString(R.string.reply_label);
+        RemoteInput remoteInput = new RemoteInput.Builder(MessagingIntentService.EXTRA_REPLY)
+                .setLabel(replyLabel)
+                .build();
+
+        PendingIntent replyActionPendingIntent;
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            Intent intent = new Intent(this, MessagingIntentService.class);
+            intent.setAction(MessagingIntentService.ACTION_REPLY);
+            replyActionPendingIntent = PendingIntent.getService(this, 0, intent, 0);
+
+        } else {
+            replyActionPendingIntent = mainPendingIntent;
+        }
+
+        NotificationCompat.Action replyAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_reply_black_18dp,
+                        replyLabel,
+                        replyActionPendingIntent)
+                        .addRemoteInput(remoteInput)
+                        // Allows system to generate replies by context of conversation
+                        .setAllowGeneratedReplies(true)
+                        .build();
+
+
+        // 5. Build and issue the notification
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        notificationCompatBuilder
+                .setStyle(messagingStyle)
+                .setContentTitle(contentTitle)
+                .setContentText(messagingData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_person_black_48dp))
+                .setContentIntent(mainPendingIntent)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+                .setSubText(Integer.toString(messagingData.getNumberOfNewMessages()))
+                .addAction(replyAction)
+                .setCategory(Notification.CATEGORY_MESSAGE)
+                .setPriority(Notification.PRIORITY_HIGH)
+                .setVisibility(Notification.VISIBILITY_PRIVATE)
+                .extend(wearableExtenderForWearVersion1);
+
+        for (String name : messagingData.getParticipants()) {
+            notificationCompatBuilder.addPerson(name);
+        }
+
+        return notificationCompatBuilder;
+    }
+}
\ No newline at end of file
diff --git a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingMainActivity.java b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingMainActivity.java
new file mode 100644
index 0000000..77d9d0c
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingMainActivity.java
@@ -0,0 +1,47 @@
+/*
+Copyright 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.wearable.wear.wearnotifications.handlers;
+
+import android.app.Activity;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.os.Bundle;
+
+import com.example.android.wearable.wear.wearnotifications.MainActivity;
+import com.example.android.wearable.wear.wearnotifications.R;
+
+/**
+ * Template class meant to include functionality for your Messaging App. (This project's main focus
+ * is on Notification Styles.)
+ */
+public class MessagingMainActivity extends Activity {
+
+    private static final String TAG = "MessagingMainActivity";
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_messaging_main);
+
+        // Cancel Notification
+        NotificationManager notificationManager =
+                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+        notificationManager.cancel(MainActivity.NOTIFICATION_ID);
+
+        // TODO: Handle and display message/conversation from your database
+    }
+}
\ No newline at end of file
diff --git a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/mock/MockDatabase.java b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/mock/MockDatabase.java
new file mode 100644
index 0000000..b552f6d
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/mock/MockDatabase.java
@@ -0,0 +1,400 @@
+package com.example.android.wearable.wear.wearnotifications.mock;
+
+import android.support.v4.app.NotificationCompat.MessagingStyle;
+
+import com.example.android.wearable.wear.wearnotifications.R;
+
+import java.util.ArrayList;
+
+/**
+ * Mock data for each of the Notification Style Demos.
+ */
+public final class MockDatabase {
+
+    public static BigTextStyleReminderAppData getBigTextStyleData() {
+        return BigTextStyleReminderAppData.getInstance();
+    }
+
+    public static BigPictureStyleSocialAppData getBigPictureStyleData() {
+        return BigPictureStyleSocialAppData.getInstance();
+    }
+
+    public static InboxStyleEmailAppData getInboxStyleData() {
+        return InboxStyleEmailAppData.getInstance();
+    }
+
+    public static MessagingStyleCommsAppData getMessagingStyleData() {
+        return MessagingStyleCommsAppData.getInstance();
+    }
+
+    /**
+     * Represents data needed for BigTextStyle Notification.
+     */
+    public static class BigTextStyleReminderAppData {
+
+        private static BigTextStyleReminderAppData sInstance = null;
+
+        // Standard notification values
+        private String mContentTitle;
+        private String mContentText;
+
+        // Style notification values
+        private String mBigContentTitle;
+        private String mBigText;
+        private String mSummaryText;
+
+
+        public static BigTextStyleReminderAppData getInstance() {
+            if (sInstance == null) {
+                sInstance = getSync();
+            }
+
+            return sInstance;
+        }
+
+        private static synchronized BigTextStyleReminderAppData getSync() {
+            if (sInstance == null) {
+                sInstance = new BigTextStyleReminderAppData();
+            }
+
+            return sInstance;
+        }
+
+        private BigTextStyleReminderAppData() {
+            // Standard Notification values
+            // Title for API <16 (4.0 and below) devices
+            mContentTitle = "Don't forget to...";
+            // Content for API <24 (4.0 and below) devices
+            mContentText = "Feed Dogs and check garage!";
+
+            // BigText Style Notification values
+            mBigContentTitle = "Don't forget to...";
+            mBigText = "... feed the dogs before you leave for work, and check the garage to "
+                            + "make sure the door is closed.";
+            mSummaryText = "Dogs and Garage";
+        }
+        public String getContentTitle() {
+            return mContentTitle;
+        }
+
+        public String getContentText() {
+            return mContentText;
+        }
+
+        public String getBigContentTitle() {
+            return mBigContentTitle;
+        }
+
+        public String getBigText() {
+            return mBigText;
+        }
+
+        public String getSummaryText() {
+            return mSummaryText;
+        }
+
+        @Override
+        public String toString() {
+            return getBigContentTitle() + getBigText();
+        }
+    }
+
+    /**
+     * Represents data needed for BigPictureStyle Notification.
+     */
+    public static class BigPictureStyleSocialAppData {
+        private static BigPictureStyleSocialAppData sInstance = null;
+
+        // Standard notification values
+        private String mContentTitle;
+        private String mContentText;
+
+        // Style notification values
+        private int mBigImage;
+        private String mBigContentTitle;
+        private String mSummaryText;
+
+        private CharSequence[] mPossiblePostResponses;
+
+        private ArrayList<String> mParticipants;
+
+
+        public static BigPictureStyleSocialAppData getInstance() {
+            if (sInstance == null) {
+                sInstance = getSync();
+            }
+            return sInstance;
+        }
+
+        private static synchronized BigPictureStyleSocialAppData getSync() {
+            if (sInstance == null) {
+                sInstance = new BigPictureStyleSocialAppData();
+            }
+
+            return sInstance;
+        }
+
+        private BigPictureStyleSocialAppData() {
+            // Standard Notification values
+            // Title/Content for API <16 (4.0 and below) devices
+            mContentTitle = "Bob's Post";
+            mContentText = "[Picture] Like my shot of Earth?";
+
+            // Style notification values
+            mBigImage = R.drawable.earth;
+            mBigContentTitle = "Bob's Post";
+            mSummaryText = "Like my shot of Earth?";
+
+            // This would be possible responses based on the contents of the post
+            mPossiblePostResponses = new CharSequence[]{"Yes", "No", "Maybe?"};
+
+            mParticipants = new ArrayList<>();
+            mParticipants.add("Bob Smith");
+        }
+
+        public String getContentTitle() {
+            return mContentTitle;
+        }
+
+        public String getContentText() {
+            return mContentText;
+        }
+
+        public int getBigImage() {
+            return mBigImage;
+        }
+
+        public String getBigContentTitle() {
+            return mBigContentTitle;
+        }
+
+        public String getSummaryText() {
+            return mSummaryText;
+        }
+
+        public CharSequence[] getPossiblePostResponses() {
+            return mPossiblePostResponses;
+        }
+
+        public ArrayList<String> getParticipants() {
+            return mParticipants;
+        }
+
+        @Override
+        public String toString() {
+            return getContentTitle() + " - " + getContentText();
+        }
+    }
+
+    /**
+     * Represents data needed for InboxStyle Notification.
+     */
+    public static class InboxStyleEmailAppData {
+        private static InboxStyleEmailAppData sInstance = null;
+
+        // Standard notification values
+        private String mContentTitle;
+        private String mContentText;
+        private int mNumberOfNewEmails;
+
+        // Style notification values
+        private String mBigContentTitle;
+        private String mSummaryText;
+        private ArrayList<String> mIndividualEmailSummary;
+
+        private ArrayList<String> mParticipants;
+
+        public static InboxStyleEmailAppData getInstance() {
+            if (sInstance == null) {
+                sInstance = getSync();
+            }
+            return sInstance;
+        }
+
+        private static synchronized InboxStyleEmailAppData getSync() {
+            if (sInstance == null) {
+                sInstance = new InboxStyleEmailAppData();
+            }
+
+            return sInstance;
+        }
+
+        private InboxStyleEmailAppData() {
+            // Standard Notification values
+            // Title/Content for API <16 (4.0 and below) devices
+            mContentTitle = "5 new emails";
+            mContentText = "from Jane, Jay, Alex +2 more";
+            mNumberOfNewEmails = 5;
+
+            // Style notification values
+            mBigContentTitle = "5 new emails from Jane, Jay, Alex +2";
+            mSummaryText = "New emails";
+
+            // Add each summary line of the new emails, you can add up to 5
+            mIndividualEmailSummary = new ArrayList<>();
+            mIndividualEmailSummary.add("Jane Faab  -   Launch Party is here...");
+            mIndividualEmailSummary.add("Jay Walker -   There's a turtle on the server!");
+            mIndividualEmailSummary.add("Alex Chang -   Check this out...");
+            mIndividualEmailSummary.add("Jane Johns -   Check in code?");
+            mIndividualEmailSummary.add("John Smith -   Movies later....");
+
+            // If the phone is in "Do not disturb mode, the user will still be notified if
+            // the user(s) is starred as a favorite.
+            mParticipants = new ArrayList<>();
+            mParticipants.add("Jane Faab");
+            mParticipants.add("Jay Walker");
+            mParticipants.add("Alex Chang");
+            mParticipants.add("Jane Johns");
+            mParticipants.add("John Smith");
+        }
+
+        public String getContentTitle() {
+            return mContentTitle;
+        }
+
+        public String getContentText() {
+            return mContentText;
+        }
+
+        public int getNumberOfNewEmails() {
+            return mNumberOfNewEmails;
+        }
+
+        public String getBigContentTitle() {
+            return mBigContentTitle;
+        }
+
+        public String getSummaryText() {
+            return mSummaryText;
+        }
+
+        public ArrayList<String> getIndividualEmailSummary() {
+            return mIndividualEmailSummary;
+        }
+
+        public ArrayList<String> getParticipants() {
+            return mParticipants;
+        }
+
+        @Override
+        public String toString() {
+            return getContentTitle() + " " + getContentText();
+        }
+    }
+
+    /**
+     * Represents data needed for MessagingStyle Notification.
+     */
+    public static class MessagingStyleCommsAppData {
+
+        private static MessagingStyleCommsAppData sInstance = null;
+
+        // Standard notification values
+        private String mContentTitle;
+        private String mContentText;
+
+        // Style notification values
+        private ArrayList<MessagingStyle.Message> mMessages;
+        // Basically, String of all mMessages
+        private String mFullConversation;
+        // Name preferred when replying to chat
+        private String mReplayName;
+        private int mNumberOfNewMessages;
+        private ArrayList<String> mParticipants;
+
+        public static MessagingStyleCommsAppData getInstance() {
+            if (sInstance == null) {
+                sInstance = getSync();
+            }
+            return sInstance;
+        }
+
+        private static synchronized MessagingStyleCommsAppData getSync() {
+            if (sInstance == null) {
+                sInstance = new MessagingStyleCommsAppData();
+            }
+
+            return sInstance;
+        }
+
+        private MessagingStyleCommsAppData() {
+            // Standard notification values
+            // Content for API <24 (M and below) devices
+            mContentTitle = "2 Messages w/ Famous McFamously";
+            mContentText = "Dude! ... You know I am a Pesce-pescetarian. :P";
+
+            // Style notification values
+
+            // For each message, you need the timestamp, in this case, we are using arbitrary ones.
+            long currentTime = System.currentTimeMillis();
+
+            mMessages = new ArrayList<>();
+            mMessages.add(new MessagingStyle.Message(
+                    "What are you doing tonight?", currentTime - 4000, "Famous"));
+            mMessages.add(new MessagingStyle.Message(
+                    "I don't know, dinner maybe?", currentTime - 3000, null));
+            mMessages.add(new MessagingStyle.Message(
+                    "Sounds good.", currentTime - 2000, "Famous"));
+            mMessages.add(new MessagingStyle.Message(
+                    "How about BBQ?", currentTime - 1000, null));
+            // Last two are the newest message (2) from friend
+            mMessages.add(new MessagingStyle.Message(
+                    "Dude!", currentTime, "Famous"));
+            mMessages.add(new MessagingStyle.Message(
+                    "You know I am a Pesce-pescetarian. :P", currentTime, "Famous"));
+
+
+            // String version of the mMessages above
+            mFullConversation = "Famous: What are you doing tonight?\n\n"
+                    + "Me: I don't know, dinner maybe?\n\n"
+                    + "Famous: Sounds good.\n\n"
+                    + "Me: How about BBQ?\n\n"
+                    + "Famous: Dude!\n\n"
+                    + "Famous: You know I am a Pesce-pescetarian. :P\n\n";
+
+            mNumberOfNewMessages = 2;
+
+            // Name preferred when replying to chat
+            mReplayName = "Me";
+
+            // If the phone is in "Do not disturb mode, the user will still be notified if
+            // the user(s) is starred as a favorite.
+            mParticipants = new ArrayList<>();
+            mParticipants.add("Famous McFamously");
+
+        }
+
+        public String getContentTitle() {
+            return mContentTitle;
+        }
+
+        public String getContentText() {
+            return mContentText;
+        }
+
+        public ArrayList<MessagingStyle.Message> getMessages() {
+            return mMessages;
+        }
+
+        public String getFullConversation() {
+            return mFullConversation;
+        }
+
+        public String getReplayName() {
+            return mReplayName;
+        }
+
+        public int getNumberOfNewMessages() {
+            return mNumberOfNewMessages;
+        }
+
+        public ArrayList<String> getParticipants() {
+            return mParticipants;
+        }
+
+        @Override
+        public String toString() {
+            return getFullConversation();
+        }
+    }
+}
\ No newline at end of file
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/earth.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/earth.png
new file mode 100644
index 0000000..13abd77
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/earth.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_alarm_white_48dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_alarm_white_48dp.png
new file mode 100644
index 0000000..75e5a46
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_alarm_white_48dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_cancel_white_48dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_cancel_white_48dp.png
new file mode 100644
index 0000000..dc32a14
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_cancel_white_48dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_launcher.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..0ed1b5f
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_message_black_18dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_message_black_18dp.png
new file mode 100644
index 0000000..d921ba2
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_message_black_18dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_person_black_48dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_person_black_48dp.png
new file mode 100644
index 0000000..f1e1484
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_person_black_48dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_reply_black_18dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_reply_black_18dp.png
new file mode 100644
index 0000000..47a2693
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-hdpi/ic_reply_black_18dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_alarm_white_48dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_alarm_white_48dp.png
new file mode 100644
index 0000000..280e09d
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_alarm_white_48dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_cancel_white_48dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_cancel_white_48dp.png
new file mode 100644
index 0000000..6ebbc83
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_cancel_white_48dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_launcher.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..2b6948a
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_message_black_18dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_message_black_18dp.png
new file mode 100644
index 0000000..2156f16
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_message_black_18dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_person_black_48dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_person_black_48dp.png
new file mode 100644
index 0000000..360a32f
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_person_black_48dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_reply_black_18dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_reply_black_18dp.png
new file mode 100644
index 0000000..c2e8207
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-mdpi/ic_reply_black_18dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_alarm_white_48dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_alarm_white_48dp.png
new file mode 100644
index 0000000..aa8102f
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_alarm_white_48dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_cancel_white_48dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_cancel_white_48dp.png
new file mode 100644
index 0000000..dc775b2
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_cancel_white_48dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_launcher.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..d9b1348
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_message_black_18dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_message_black_18dp.png
new file mode 100644
index 0000000..185d613
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_message_black_18dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_person_black_48dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_person_black_48dp.png
new file mode 100644
index 0000000..1ebc37b
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_person_black_48dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_reply_black_18dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_reply_black_18dp.png
new file mode 100644
index 0000000..f1e8deb
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_reply_black_18dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_alarm_white_48dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_alarm_white_48dp.png
new file mode 100644
index 0000000..f665286
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_alarm_white_48dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_cancel_white_48dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_cancel_white_48dp.png
new file mode 100644
index 0000000..cf2822a
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_cancel_white_48dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_launcher.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..cb4f56f
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_message_black_18dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_message_black_18dp.png
new file mode 100644
index 0000000..e710dee
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_message_black_18dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_person_black_48dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_person_black_48dp.png
new file mode 100644
index 0000000..77e3a18
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_person_black_48dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_reply_black_18dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_reply_black_18dp.png
new file mode 100644
index 0000000..a47ec11
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_reply_black_18dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_alarm_white_48dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_alarm_white_48dp.png
new file mode 100644
index 0000000..419f4bb
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_alarm_white_48dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_cancel_white_48dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_cancel_white_48dp.png
new file mode 100644
index 0000000..8bea844
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_cancel_white_48dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_launcher.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..77c9929
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_message_black_18dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_message_black_18dp.png
new file mode 100644
index 0000000..5456c42
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_message_black_18dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_person_black_48dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_person_black_48dp.png
new file mode 100644
index 0000000..6be3e30
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_person_black_48dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_reply_black_18dp.png b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_reply_black_18dp.png
new file mode 100644
index 0000000..c32401a
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_reply_black_18dp.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/layout/activity_big_picture_main.xml b/wearable/wear/WearNotifications/Application/src/main/res/layout/activity_big_picture_main.xml
new file mode 100644
index 0000000..e86c462
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/layout/activity_big_picture_main.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+<RelativeLayout
+    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"
+    tools:context=".handlers.BigPictureSocialMainActivity">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/main_text_activity_big_picture_main"
+        android:id="@+id/mainTextView"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentEnd="true"
+        android:layout_alignParentBottom="true"/>
+</RelativeLayout>
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/layout/activity_big_text_main.xml b/wearable/wear/WearNotifications/Application/src/main/res/layout/activity_big_text_main.xml
new file mode 100644
index 0000000..5b37603
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/layout/activity_big_text_main.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+<RelativeLayout
+    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"
+    tools:context=".handlers.BigTextMainActivity">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/main_text_activity_big_text_main"
+        android:id="@+id/mainTextView"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentEnd="true"
+        android:layout_alignParentBottom="true"/>
+
+</RelativeLayout>
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/layout/activity_inbox_main.xml b/wearable/wear/WearNotifications/Application/src/main/res/layout/activity_inbox_main.xml
new file mode 100644
index 0000000..0377b4a
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/layout/activity_inbox_main.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+<RelativeLayout
+    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"
+    tools:context=".handlers.InboxMainActivity">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/main_text_activity_inbox_main"
+        android:id="@+id/mainTextView"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentEnd="true"
+        android:layout_alignParentBottom="true"/>
+
+</RelativeLayout>
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/layout/activity_main.xml b/wearable/wear/WearNotifications/Application/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..c18e102
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/layout/activity_main.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 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.
+-->
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/mainRelativeLayout"
+    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"
+    tools:context="com.example.android.wearable.wear.wearnotifications.MainActivity">
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Pick your Notification Style:"
+        android:id="@+id/spinnerHeadertextView"/>
+
+    <Spinner
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:id="@+id/spinner"
+        android:layout_below="@+id/spinnerHeadertextView"
+        android:paddingTop="@dimen/activity_vertical_margin"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentEnd="true"/>
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/notificationDetails"
+        android:layout_below="@+id/spinner"
+        android:layout_alignParentStart="true"
+        android:layout_above="@+id/submit"
+        android:layout_alignEnd="@+id/spinner"
+        android:paddingTop="@dimen/activity_vertical_margin"/>
+
+    <Button
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Launch!"
+        android:onClick="onClick"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentStart="true"
+        android:id="@+id/submit"/>
+</RelativeLayout>
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/layout/activity_messaging_main.xml b/wearable/wear/WearNotifications/Application/src/main/res/layout/activity_messaging_main.xml
new file mode 100644
index 0000000..205b428
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/layout/activity_messaging_main.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+<RelativeLayout
+    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"
+    tools:context=".handlers.MessagingMainActivity">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/main_text_activity_messaging_main"
+        android:id="@+id/mainTextView"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentEnd="true"
+        android:layout_alignParentBottom="true"/>
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/values-w820dp/dimens.xml b/wearable/wear/WearNotifications/Application/src/main/res/values-w820dp/dimens.xml
new file mode 100644
index 0000000..2a45ed8
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/values-w820dp/dimens.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+<resources>
+    <!-- Example customization of dimensions originally defined in res/values/dimens.xml
+         (such as screen margins) for screens with more than 820dp of available width. This
+         would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
+    <dimen name="activity_horizontal_margin">64dp</dimen>
+</resources>
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/values/colors.xml b/wearable/wear/WearNotifications/Application/src/main/res/values/colors.xml
new file mode 100644
index 0000000..752b74f
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/values/colors.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+<resources>
+    <color name="colorPrimary">#3F51B5</color>
+    <color name="colorPrimaryDark">#303F9F</color>
+    <color name="colorAccent">#FF4081</color>
+</resources>
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/values/dimens.xml b/wearable/wear/WearNotifications/Application/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..fcb2a42
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/values/dimens.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+<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/WearNotifications/Application/src/main/res/values/strings.xml b/wearable/wear/WearNotifications/Application/src/main/res/values/strings.xml
new file mode 100644
index 0000000..ddd1641
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/values/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+<resources>
+
+    <string name="reply_label">Reply</string>
+    <string name="reply_name">Me</string>
+
+    <string name="title_activity_big_text_main">BigTextStyle Main Activity</string>
+    <string name="title_activity_big_picture_main">BigPictureStyle Main Activity</string>
+    <string name="title_activity_inbox_main">InboxStyle Main Activity</string>
+    <string name="title_activity_messaging_main">MessagingStyle Main Activity</string>
+
+    <string name="main_text_activity_big_text_main">
+        This Activity would handle the reminder app\'s functionality.
+        \n\nThe notification type for this example was the Big Text Style!
+    </string>
+    <string name="main_text_activity_big_picture_main">
+        This Activity would handle the social app\'s functionality for an individual post.
+        \n\nThe notification type for this example was the Big Picture Style!
+    </string>
+    <string name="main_text_activity_inbox_main">
+        This Activity would handle the email app\'s functionality for an email(s).
+        \n\nThe notification type for this example was the Inbox Style!
+    </string>
+    <string name="main_text_activity_messaging_main">
+        This Activity would handle the messaging app\'s functionality for a chat(s).
+        \n\nThe notification type for this example was the Messaging Style!
+    </string>
+</resources>
\ No newline at end of file
diff --git a/wearable/wear/WearNotifications/Application/src/main/res/values/styles.xml b/wearable/wear/WearNotifications/Application/src/main/res/values/styles.xml
new file mode 100644
index 0000000..5fff39c
--- /dev/null
+++ b/wearable/wear/WearNotifications/Application/src/main/res/values/styles.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+<resources>
+
+<!--
+TODO: Fix in template
+-->
+
+</resources>
\ No newline at end of file
diff --git a/wearable/wear/WearNotifications/Wearable/.gitignore b/wearable/wear/WearNotifications/Wearable/.gitignore
new file mode 100644
index 0000000..6eb878d
--- /dev/null
+++ b/wearable/wear/WearNotifications/Wearable/.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/WearNotifications/Wearable/src/main/AndroidManifest.xml b/wearable/wear/WearNotifications/Wearable/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..d181dcc
--- /dev/null
+++ b/wearable/wear/WearNotifications/Wearable/src/main/AndroidManifest.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.example.android.wearable.wear.wearnotifications"
+          android:versionCode="1"
+          android:versionName="1.0">
+
+    <uses-feature android:name="android.hardware.type.watch"/>
+    <!-- Required for Always-on. -->
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
+
+    <application android:allowBackup="true"
+                 android:icon="@mipmap/ic_launcher"
+                 android:label="@string/app_name"
+                 android:supportsRtl="true"
+                 android:theme="@android:style/Theme.DeviceDefault">
+
+        <!--If you want your app to run on pre-22, then set required to false -->
+        <uses-library android:name="com.google.android.wearable" android:required="false" />
+
+        <activity android:name=".MainActivity"
+                  android:label="@string/app_name">
+            <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/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/MainActivity.java b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/MainActivity.java
new file mode 100644
index 0000000..1f73a74
--- /dev/null
+++ b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/MainActivity.java
@@ -0,0 +1,41 @@
+/*
+Copyright 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.wearable.wear.wearnotifications;
+
+import android.os.Bundle;
+import android.support.wearable.activity.WearableActivity;
+import android.util.Log;
+
+/**
+ * Demonstrates best practice for standalone Notifications for Android Wear apps using various
+ * Notification Styles.
+ */
+public class MainActivity extends WearableActivity {
+
+    private static final String TAG = "MainActivity";
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Log.d(TAG, "onCreate()");
+
+        setContentView(R.layout.activity_main);
+        setAmbientEnabled();
+
+        // TODO (jewalker): Add Wear app specific notifications for next CL
+
+    }
+}
\ No newline at end of file
diff --git a/wearable/wear/WearNotifications/Wearable/src/main/res/drawable-hdpi/earth.png b/wearable/wear/WearNotifications/Wearable/src/main/res/drawable-hdpi/earth.png
new file mode 100644
index 0000000..13abd77
--- /dev/null
+++ b/wearable/wear/WearNotifications/Wearable/src/main/res/drawable-hdpi/earth.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Wearable/src/main/res/layout/activity_main.xml b/wearable/wear/WearNotifications/Wearable/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..5c715e2
--- /dev/null
+++ b/wearable/wear/WearNotifications/Wearable/src/main/res/layout/activity_main.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 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.
+-->
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="TODO (jewalker): Add app"/>
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/wearable/wear/WearNotifications/Wearable/src/main/res/mipmap-hdpi/ic_launcher.png b/wearable/wear/WearNotifications/Wearable/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..cde69bc
--- /dev/null
+++ b/wearable/wear/WearNotifications/Wearable/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Wearable/src/main/res/mipmap-mdpi/ic_launcher.png b/wearable/wear/WearNotifications/Wearable/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c133a0c
--- /dev/null
+++ b/wearable/wear/WearNotifications/Wearable/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Wearable/src/main/res/mipmap-xhdpi/ic_launcher.png b/wearable/wear/WearNotifications/Wearable/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..bfa42f0
--- /dev/null
+++ b/wearable/wear/WearNotifications/Wearable/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Wearable/src/main/res/mipmap-xxhdpi/ic_launcher.png b/wearable/wear/WearNotifications/Wearable/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..324e72c
--- /dev/null
+++ b/wearable/wear/WearNotifications/Wearable/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Wearable/src/main/res/values/strings.xml b/wearable/wear/WearNotifications/Wearable/src/main/res/values/strings.xml
new file mode 100644
index 0000000..fd9f945
--- /dev/null
+++ b/wearable/wear/WearNotifications/Wearable/src/main/res/values/strings.xml
@@ -0,0 +1,19 @@
+<!--
+  Copyright 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.
+-->
+<resources>
+    <string name="app_name">Wear Notifications</string>
+
+</resources>
\ No newline at end of file
diff --git a/wearable/wear/WearNotifications/build.gradle b/wearable/wear/WearNotifications/build.gradle
new file mode 100644
index 0000000..b95a860
--- /dev/null
+++ b/wearable/wear/WearNotifications/build.gradle
@@ -0,0 +1,12 @@
+
+
+// BEGIN_EXCLUDE
+import com.example.android.samples.build.SampleGenPlugin
+apply plugin: SampleGenPlugin
+
+samplegen {
+  pathToBuild "../../../../../build"
+  pathToSamplesCommon "../../../common"
+}
+apply from: "../../../../../build/build.gradle"
+// END_EXCLUDE
diff --git a/wearable/wear/WearNotifications/buildSrc/build.gradle b/wearable/wear/WearNotifications/buildSrc/build.gradle
new file mode 100644
index 0000000..7c150e4
--- /dev/null
+++ b/wearable/wear/WearNotifications/buildSrc/build.gradle
@@ -0,0 +1,16 @@
+
+repositories {
+    jcenter()
+}
+dependencies {
+    compile 'org.freemarker:freemarker:2.3.20'
+}
+
+sourceSets {
+    main {
+        groovy {
+            srcDir new File(rootDir, "../../../../../../build/buildSrc/src/main/groovy")
+        }
+    }
+}
+
diff --git a/wearable/wear/WearNotifications/gradle/wrapper/gradle-wrapper.jar b/wearable/wear/WearNotifications/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..8c0fb64
--- /dev/null
+++ b/wearable/wear/WearNotifications/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/wearable/wear/WearNotifications/gradle/wrapper/gradle-wrapper.properties b/wearable/wear/WearNotifications/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..39f8d57
--- /dev/null
+++ b/wearable/wear/WearNotifications/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Thu Aug 18 11:31:37 PDT 2016
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/wearable/wear/WearNotifications/gradlew b/wearable/wear/WearNotifications/gradlew
new file mode 100755
index 0000000..91a7e26
--- /dev/null
+++ b/wearable/wear/WearNotifications/gradlew
@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+    echo "$*"
+}
+
+die ( ) {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+esac
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >&-
+APP_HOME="`pwd -P`"
+cd "$SAVED" >&-
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+    JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/wearable/wear/WearNotifications/gradlew.bat b/wearable/wear/WearNotifications/gradlew.bat
new file mode 100644
index 0000000..aec9973
--- /dev/null
+++ b/wearable/wear/WearNotifications/gradlew.bat
@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off

+@rem ##########################################################################

+@rem

+@rem  Gradle startup script for Windows

+@rem

+@rem ##########################################################################

+

+@rem Set local scope for the variables with windows NT shell

+if "%OS%"=="Windows_NT" setlocal

+

+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.

+set DEFAULT_JVM_OPTS=

+

+set DIRNAME=%~dp0

+if "%DIRNAME%" == "" set DIRNAME=.

+set APP_BASE_NAME=%~n0

+set APP_HOME=%DIRNAME%

+

+@rem Find java.exe

+if defined JAVA_HOME goto findJavaFromJavaHome

+

+set JAVA_EXE=java.exe

+%JAVA_EXE% -version >NUL 2>&1

+if "%ERRORLEVEL%" == "0" goto init

+

+echo.

+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

+echo.

+echo Please set the JAVA_HOME variable in your environment to match the

+echo location of your Java installation.

+

+goto fail

+

+:findJavaFromJavaHome

+set JAVA_HOME=%JAVA_HOME:"=%

+set JAVA_EXE=%JAVA_HOME%/bin/java.exe

+

+if exist "%JAVA_EXE%" goto init

+

+echo.

+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%

+echo.

+echo Please set the JAVA_HOME variable in your environment to match the

+echo location of your Java installation.

+

+goto fail

+

+:init

+@rem Get command-line arguments, handling Windowz variants

+

+if not "%OS%" == "Windows_NT" goto win9xME_args

+if "%@eval[2+2]" == "4" goto 4NT_args

+

+:win9xME_args

+@rem Slurp the command line arguments.

+set CMD_LINE_ARGS=

+set _SKIP=2

+

+:win9xME_args_slurp

+if "x%~1" == "x" goto execute

+

+set CMD_LINE_ARGS=%*

+goto execute

+

+:4NT_args

+@rem Get arguments from the 4NT Shell from JP Software

+set CMD_LINE_ARGS=%$

+

+:execute

+@rem Setup the command line

+

+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar

+

+@rem Execute Gradle

+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%

+

+:end

+@rem End local scope for the variables with windows NT shell

+if "%ERRORLEVEL%"=="0" goto mainEnd

+

+:fail

+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of

+rem the _cmd.exe /c_ return code!

+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1

+exit /b 1

+

+:mainEnd

+if "%OS%"=="Windows_NT" endlocal

+

+:omega

diff --git a/wearable/wear/WearNotifications/settings.gradle b/wearable/wear/WearNotifications/settings.gradle
new file mode 100644
index 0000000..f35b8cc
--- /dev/null
+++ b/wearable/wear/WearNotifications/settings.gradle
@@ -0,0 +1,2 @@
+
+include ':Application', ':Wearable'
diff --git a/wearable/wear/WearNotifications/template-params.xml b/wearable/wear/WearNotifications/template-params.xml
new file mode 100644
index 0000000..0badfa4
--- /dev/null
+++ b/wearable/wear/WearNotifications/template-params.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<sample>
+    <name>Wear Notifications</name>
+    <group>Wearable</group>
+    <package>com.example.android.wearable.wear.wearnotifications</package>
+
+    <minSdk>18</minSdk>
+    <targetSdkVersion>24</targetSdkVersion>
+    <targetSdkVersionWear>23</targetSdkVersionWear>
+
+    <wearable>
+        <has_handheld_app>true</has_handheld_app>
+    </wearable>
+
+    <dependency>com.android.support:appcompat-v7:24.0.0</dependency>
+    <dependency>com.android.support:cardview-v7:24.0.0</dependency>
+    <dependency>com.android.support:design:24.0.0</dependency>
+
+    <provided_dependency_wearable>com.google.android.wearable:wearable:1.0.0</provided_dependency_wearable>
+
+    <!-- Include additional dependencies here.-->
+    <!-- dependency>com.google.android.gms:play-services:5.0.+</dependency -->
+
+    <strings>
+        <intro>
+            <![CDATA[
+            Sample demonstrates best practices for Notification Styles that support Android
+            phone/tablets and Android Wear. The phone app demonstrates best practices if you do not
+            have a dedicated Android Wear app for Notifications. While the Android Wear app
+            demonstrates best practices for a standalone Wear Notification experience without
+            the Notifications showing on the phone/tablet.
+            ]]>
+        </intro>
+    </strings>
+
+    <template src="base" />
+    <template src="Wear" />
+
+    <metadata>
+        <!-- Values: {DRAFT | PUBLISHED | INTERNAL | DEPRECATED | SUPERCEDED} -->
+        <status>DRAFT</status>
+        <!-- See http://go/sample-categories for details on the next 4 fields. -->
+        <!-- Most samples just need to udpate the Categories field. This is a comma-
+             seperated list of topic tags. Unlike the old category system, samples
+             may have multiple categories, so feel free to add extras. Try to avoid
+             simply tagging everything with "UI". :)-->
+        <categories>Notifications, Wear</categories>
+        <technologies>Android</technologies>
+        <languages>Java</languages>
+        <solutions>Mobile</solutions>
+        <!-- Values: {BEGINNER | INTERMEDIATE | ADVANCED | EXPERT} -->
+        <!-- Beginner is for "getting started" type content, or essential content.
+             (e.g. "Hello World", activities, intents)
+
+             Intermediate is for content that covers material a beginner doesn't need
+             to know, but that a skilled developer is expected to know.
+             (e.g. services, basic styles and theming, sync adapters)
+
+             Advanced is for highly technical content geared towards experienced developers.
+             (e.g. performance optimizations, custom views, bluetooth)
+
+             Expert is reserved for highly technical or specialized content, and should
+             be used sparingly. (e.g. VPN clients, SELinux, custom instrumentation runners) -->
+        <level>INTERMEDIATE</level>
+        <!-- Dimensions: 512x512, PNG fomrat -->
+        <icon>screenshots/icon-web.png</icon>
+        <!-- Path to screenshots. Use <img> tags for each. -->
+        <screenshots>
+            <img>screenshots/1-main.png</img>
+            <img>screenshots/2-settings.png</img>
+        </screenshots>
+        <!-- List of APIs that this sample should be cross-referenced under. Use <android>
+        for fully-qualified Framework class names ("android:" namespace).
+
+        Use <ext> for custom namespaces, if needed. See "Samples Index API" documentation
+        for more details. -->
+        <api_refs>
+            <android>android.app.ActionBar</android>
+        </api_refs>
+
+        <!-- 1-3 line description of the sample here.
+
+            Avoid simply rearranging the sample's title. What does this sample actually
+            accomplish, and how does it do it? -->
+        <description>
+            Sample demonstrates Notification Styles (Inbox, BigPicture, BigText, and Messaging)
+            examples and best practices for those Notifications.
+        </description>
+
+        <!-- Multi-paragraph introduction to sample, from an educational point-of-view.
+        Makrdown formatting allowed. This will be used to generate a mini-article for the
+        sample on DAC. -->
+        <intro>
+            TODO (jewalker): Finish long intro breaking out phone app vs wear app..
+
+            Multi-paragraph introduction to sample, from an educational point-of-view.
+            *Markdown* formatting allowed. See [Markdown Documentation][1]
+            for details.
+
+            [1]: http://daringfireball.net/projects/markdown/syntax
+        </intro>
+    </metadata>
+</sample>