<!--
  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>

    <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>